私が取っているJavaクラスでは、クライアントとサーバーの間でデータをやり取りするためにソケットを使用する必要があります。文字列データを渡す例を取得できますが、カスタム クラス オブジェクト (つまり、製品) とこれらのオブジェクトのリストをやり取りできる必要があります。サーバーピースが入力を正常に読み取ることができません。誰かが問題を特定できるかどうかを確認するために、コードの簡単な例を作成しようとしました。コードが完全ではないことは理解していますが、クラスがストリームに書き込んでいるオブジェクトをサーバーに読み取らせることさえできません (この場合、文字列を書き込んで、それを取得しようとしているだけです)。動作しますが、オブジェクトの読み取り/書き込みが必要です)。これが私のコードです。私はこれを試し、他の人の質問と回答を調査するのに何時間も費やしましたが、まだこれを機能させることができません.
サンプルコードは次のとおりです。
シンプルなサーバー:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class simpleServer {
public static final int PORT_NO = 8888;
static ObjectInputStream serverReader = null;
public static void main(String[] args) throws IOException, InterruptedException {
ServerSocket serverSocket = new ServerSocket(PORT_NO);
System.out.println("... server is accepting request");
Object myObject = null;
while (true) {
Socket socket = serverSocket.accept();
System.out.println("creating reader");
ObjectOutputStream objOut = new ObjectOutputStream(socket.getOutputStream());
serverReader = new ObjectInputStream(socket.getInputStream());
System.out.println("created reader");
try {
System.out.println("try to read");
myObject = serverReader.readObject();
System.out.println("read it");
System.out.println(myObject);
if (myObject != null) objOut.writeUTF("Got something");
else objOut.writeUTF("got nothing");
if ("quit".equals(myObject.toString())) serverSocket.close();
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
System.out.println("cath for readobject");
}
catch (Exception e) {
System.out.println("other error");
System.out.println(e.getMessage());
}
}
}
}
シンプルなクライアント:
public static void main(String[] args) {
Socket socket;
try {
socket = new Socket("localhost", ProductDBServer.PORT_NO);
ObjectOutputStream objOut = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream objIn = new ObjectInputStream(socket.getInputStream());
objOut.writeUTF("loadProductsFromDisk");
objOut.flush();
String myString = objIn.toString();
//System.out.println(myString);
if (!"quit".equals(objIn.toString().trim())) {
//System.out.println("reading line 1");
String line;
try {
line = (String)objIn.readObject();
//System.out.println("line is " + line);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
objIn.close();
//System.out.println("result: " + line);
}
System.out.println("closing socket");
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
System.out.println("Unknownhostexception");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("ioexception");
e.printStackTrace();
}
}
コードは、送信したオブジェクトを読み取ろうとするサーバー側のポイントまで実行され、その後終了するように見えます。誰かが私が間違っていることを見ることができますか? これはとても簡単なことのように思えますが、それでもうまくいかないようです。助けてくれてありがとう!