繁体   English   中英

客户端突然断开连接后如何使服务器套接字保持活动状态?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM