私の目標は、ObjectInputStream から Message オブジェクトを受け取り、その Message オブジェクトを ObjectOutputStream にエコーするサーバーを作成することです。
メッセージを書き込むと、クライアントは Message タイプ オブジェクトをサーバーに送信し、受信した Message タイプ オブジェクト (およびサーバーに接続されている他のクライアントからの Message タイプ オブジェクト) を受信し、クライアントの GUI にデコードします。
Message オブジェクトには String とその他のフォント情報があります。
私の問題は、サーバーが Message タイプのオブジェクトをエコーバックしないことです。キャスティングが下手な気がしますが、今は色々試しながら釣ってます。
アイデアは、サーバーをクライアントから透過的にすることです-これは可能ですか、つまり、サーバーは TestObject クラスについて何も知りませんか? これを回避する方法はありますか?
サーバーコード:
import java.net.*;
import java.io.*;
public class Server
{
public SimpleServer() throws IOException, ClassNotFoundException
{
ServerSocket ss = new ServerSocket(4000);
Socket s = ss.accept();
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
// the 'echo' functionality of the server
Object to = null;
try
{
to = ois.readObject();
}
catch (ClassNotFoundException e)
{
System.out.println("broke");
e.printStackTrace();
}
oos.writeObject(to);
oos.flush();
// close the connections
ois.close();
oos.close();
s.close();
ss.close();
}
public static void main(String args[]) throws IOException, ClassNotFoundException {
new SimpleServer();
}
}
クライアントコード:
import java.net.*;
import java.io.*;
public class Client
{
public SimpleClient() throws IOException, ClassNotFoundException
{
Socket s = new Socket( "localhost", 4000 );
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
ObjectInputStream ois = new ObjectInputStream( s.getInputStream());
TestObject to = new TestObject( 1, "object from client" );
// print object contents
System.out.println( to );
oos.writeObject(to);
oos.flush();
Object received = ois.readObject();
// should match original object contents
System.out.println(received);
oos.close();
ois.close();
}
public static void main(String args[]) throws IOException, ClassNotFoundException
{
new SimpleClient();
}
}
class TestObject implements Serializable
{
int value ;
String id;
public TestObject( int v, String s )
{
this.value=v;
this.id=s;
}
@Override
public String toString()
{
return "value=" + value +
", id='" + id;
}
}
お時間をいただきありがとうございます!
編集:これは作成された出力です:
クライアントがサーバーに接続すると、次のメッセージが表示されます: Exception in thread "main" java.lang.ClassNotFoundException: TestObject
そして、これはクライアントを実行したときのクライアント出力です: value=1, id='object from client Exception in thread "main" java.net.SocketException: Connection reset