什么时候关闭Java中的套接字连接

时间:2014-07-30 06:32:27

标签: java sockets

客户

Socket socket = new Socket("ip", 5555);
PrintStream out = new PrintStream(socket.getOutputStream());
out.println("Hello Server!");
out.close();
socket.close();

服务器

ServerSocket serverSocket = new ServerSocket(5555);

while (true) {

    //keep listening
    Socket socket = serverSocket.accept();

    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));

    String line = in.readLine();

    System.out.println(line);

    in.close();
    socket.close();
}

如果忽略并发问题,关闭套接字连接的方法是否正确?

1 个答案:

答案 0 :(得分:2)

  

如果忽略并发问题,是否可以正确关闭套接字连接?

是的,但如果您已经关闭了输出流,则无需关闭套接字。

  

如果客户端在发送数据后立即关闭套接字,那么当服务器尝试从流中读取数据时,是否会导致“socket is close”等异常?

没有。 '套接字已关闭'表示关闭套接字然后继续使用它。只要客户端已经读取了服务器要发送的所有内容,客户端就可以关闭套接字:服务器将读取客户端发送的所有数据,然后在下次读取时获得流结束。