gpt4 book ai didi

Java - TCP/IP - 服务器无法将消息发送回客户端?

转载 作者:可可西里 更新时间:2023-11-01 02:36:54 25 4
gpt4 key购买 nike

我想将一个对象从我的客户端发送到我的本地主机服务器以添加到数据库,并且无论该对象是否成功发送都将结果发回。对象已成功发送,但我的服务器没有将结果发送回客户端,导致我的客户端框架因等待服务器响应而挂起。我不知道我的代码有什么问题。你能告诉我一些解决这个问题的方法吗?

这是发送结果的函数:

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();
}
}

另外,在Service函数中,控制台打印“OK”,表示满足if条件。

接收学生方法:

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;
}

最佳答案

由于 sendResult() 中的 myServer.accept(),服务器再次等待传入的客户端连接,而这已经发生在 receiveStudent() 中。重用该连接。

共享您在 receiveStudent() 中获得的客户端套接字,例如,将其变成一个字段。

public Student receiveStudent() {
...

try {
clientSocket = myServer.accept();
...
} catch (Exception ex) {
...
}
...
}

然后在 sendResult() 中重用该套接字将结果发送给客户端。

public static void sendResult(String result) {
try {
...
ObjectOutputStream os = new ObjectOutputStream(clientSocket.getOutputStream());
...
} catch (Exception ex) {
...
}
}

关于Java - TCP/IP - 服务器无法将消息发送回客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46275538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com