gpt4 book ai didi

java - TCP。即使服务器不接受客户端也会连接

转载 作者:行者123 更新时间:2023-12-01 11:18:44 25 4
gpt4 key购买 nike

我有 TCP 服务器客户端应用程序。它有效,但有时会发生一些事情。客户端连接到服务器,但服务器说他不接受他。

服务器端代码:

while(!stopped){
try {
AcceptClient();
} catch(SocketTimeoutException ex){
continue;
} catch (IOException ex) {
System.err.println("AppServer: Client cannot be accepted.\n"+ex.getMessage()+"\n");
break;
}
...

private void AcceptClient() throws IOException {
clientSocket = serverSocket.accept();
clientSocket.setSoTimeout(200);
out = new ObjectOutputStream(clientSocket.getOutputStream());
in = new ObjectInputStream(clientSocket.getInputStream());
System.out.println("Accepted connection from "+clientSocket.getInetAddress());
}

客户端代码:

    try {
socket = new Socket(IPAddress, serverPort);
socket.setSoTimeout(5000);
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
} catch (IOException e1) {
sendSystemMessage("DISCONNECTED");
sendSystemMessage(e1.getMessage());
return;
}
sendSystemMessage("CONNECTED");

如果客户端连接消息:

Accepted connection from ... appears. But sometimes it doesn't appear even if client sends message "CONNECTED"

服务器仍在运行循环尝试获取客户端,并且正在捕获 socketTimeoutException。客户端已连接,发送消息并等待响应。

最佳答案

我怀疑您的客户端的“sendSystemMessage()”中缺少“flush”。不幸的是,ObjectInputStream 的构造函数尝试从底层流中读取 header (恕我直言,这不是很直观)。因此,如果客户端无法刷新数据 - 服务器可能会停留在“in = new ObjectInputStream(socket.getInputStream())”行...

作为旁注,服务器通常更好地为每个传入客户端启动一个线程,但这只是一个旁注(而且它显然取决于要求)。

关于java - TCP。即使服务器不接受客户端也会连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31502810/

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