客户端关闭后保持套接字服务器打开

ZAX*_*ZAX 2 java sockets

我已经实现了一个带有服务器和单个客户端的套接字.它当前的结构方式,只要客户端关闭,服务器就会关闭.我的意图是让服务器运行直到手动关闭.

这是服务器:

public static void main(String args []){;

    try
    {
         ServerSocket socket= new ServerSocket(17);

         System.out.println("connect...");
         Socket s = socket.accept();
        System.out.println("Client Connected.");


        while (true)
            {

                work with server

            }

}
catch (IOException e)
    {
        e.getStackTrace();
     }
Run Code Online (Sandbox Code Playgroud)

}

我已尝试用另一个while(true)循环包围整个try/catch 循环,但它什么都不做,同样的问题仍然存在.有关如何保持服务器运行的任何想法?

Dav*_*hun 6

看起来你的代码会发生什么,你连接到客户端,无限循环与客户端的交互,然后当有人破坏连接(关闭清除,或中断它 - 例如,拔掉网络电缆)你'得到一个IOException,发送给你的catch子句运行然后继续(我猜之后"是你的main()的结束?)...

所以你需要做的是,从那时起,循环回到accept()调用,这样你就可以接受另一个新的客户端连接.例如,这里有一些伪代码:

create server socket
while (1) {
    try {
        accept client connection
        set up your I/O streams

        while (1) {
            interact with client until connection closes
        }
    } catch (...) {
        handle errors
    }
} // loop back to the accept call here
Run Code Online (Sandbox Code Playgroud)

另外,注意在这种情况下,try-catch块怎么坐落这样的错误会被捕捉和处理的接受环.这样,单个客户端连接上的错误将发送回accept()而不是终止服务器.