![](/img/trans.png)
[英]gRPC Java: How to know if a client disconnects abruptly (server side)?
[英]How to keep the server socket alive after client abruptly disconnects?
一旦客户端断开连接并且我重新启动客户端,服务器就会给出读取线路超时。 当我再次运行服务器时,它工作正常。 因此,在断开连接一次后,我收到读取线路超时异常,下次它可以工作。
import java.io.*;
public class TcpServer {
ServerSocket welcomeSocket;
public TcpServer() throws IOException{
createSocket(port);
}
public TcpServer(int port) throws IOException{
createSocket(port);
}
private void createSocket(int port) throws IOException{
welcomeSocket = new ServerSocket(port);
}
@Override
public void listen() throws IOException{
boolean exitServer = false;
Socket connectionSocket = null;
try {
while (!exitServer ) {
if(...){
exitServer = true;
}
}
}
} catch (IOException e) {
try {
welcomeSocket.accept();
listen();
} catch (IOException e1) {
System.out.println("Cannot open connection!!!");
}
}
}
}
当有人尝试连接时,ServerSocket.accept() 方法会阻止并返回一个新的客户端套接字连接。 将其放入 while 循环中,然后为这个新的套接字工作线程生成一个线程。 类似的东西:
ServerSocket welcomeSocket = new ServerSocket(port);
while (true) {
Socket socket = welcomeSocket.accept();
new Thread(new RunnableSocketWorker(socket));
}
如果您的客户确实决定断开连接,那没关系,让他们来吧。 您希望正在处理它的套接字工作程序退出。 如果新客户端尝试连接,他们将在上面使用您的 ServerSocket 对象和这个无限循环进行连接。
套接字在 Java 中相对容易的一个重要原因是这个 ServerSocket 类处理所有传入的新客户端。 你为什么要自己编码那部分?
只需取出它返回的套接字并玩得开心!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.