如何正确关闭插座?

时间:2014-05-19 12:08:17

标签: java sockets client-server

客户端:

打开套接字:

Socket socket = new Socket(host,port);

写数据:

socket.getOutputStream().write("str");
socket.getOutputStream().flush();

阅读数据:

response = socket.getInputStream().read();

关闭连接和套接字:

socket.shutdownInput();
socket.shutdownOutput();
socket.close();

服务器

Socket clientSocket = serverSocket.accept();
message = clientSocket.getInputStream().read();
clientSocket.getOutputStream().write("str2");

clientSocket.isConnected()返回true,服务器未看到客户端已断开连接。如何检测客户端是否已断开连接?

我试着用这个:

try {
     while (true) {
           message = clientSocket.getInputStream().read();
           clientSocket.getOutputStream().write("str2");
     }
} catch (IOException e) {
     clientSocket.close();
}

但它不起作用。

1 个答案:

答案 0 :(得分:0)

一种常见的方法是客户端向服务器发送“QUIT”消息。然后服务器将关闭它的套接字。

另一种方法是在服务器套接字上执行I / O并捕获客户端消失时将获得的异常。

后一种方法有几个缺点:

  • 服务器放弃尝试联系客户端需要一些时间(可能需要2分钟)
  • 错误消息可能并不总是相同。通常,您只需从操作系统获取SocketException错误消息。