クライアントからローカルホストサーバーにオブジェクトを送信してデータベースに追加し、オブジェクトが正常に送信されたかどうかを返信します。オブジェクトは正常に送信されましたが、サーバーは結果をクライアントに返さず、サーバーからの応答を待つためにクライアントフレームフォームがハングしました。自分のコードに何が問題なのか分かりません。これを解決する方法を教えていただけますか?ここでJava - TCP/IP - サーバーはクライアントにメッセージを返信できません。
は、結果を送信する機能である:送信結果関数が呼び出される
public void sendResult(String result) {
try {
Socket clientSocket = myServer.accept();
System.out.println("Connected to client");
ObjectOutputStream os = new ObjectOutputStream(clientSocket.getOutputStream());
os.writeObject(result);
System.out.println("Result sent");
} catch (Exception ex) {
ex.printStackTrace();
}
}
:また
public void service() {
try {
if (receiveStudent() != null) {
Student std = receiveStudent();
if (dao.addStudent(std)) {
System.out.println("OK");
sendResult("OK");
} else {
System.out.println("FAILED");
sendResult("FAILED");
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
は、サービス機能では、コンソールは「OK」のプリント、 if条件が満たされたことを意味します。
は学生法受け取る:そして、あなたが必要なとき
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); //for sending String messages
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); //for getting String messages
...と:あなたはちょうどこのようなものを使用していない理由をオブジェクトとして文字列を送信したい場合は
public Student receiveStudent() {
Student s = new Student();
try {
Socket clientSocket = myServer.accept();
System.out.println("Connect to client successfully");
ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream());
Object o = ois.readObject();
if (o instanceof Student) {
s = (Student) o;
return s;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
ReceiveStudent()メソッドのコードを表示 – shazin
'sendResult()'メソッドは、 'accept()'のためにクライアントが接続するのを待ちます。それは逆にするべきです、サーバーはクライアントに接続する必要があります。 –
@LucianovanderVeekensつまり、クライアントをサーバーに再接続する必要がありますか? –