关闭客户端套接字时如何防止“连接重置”错误?

时间:2012-11-30 13:10:33

标签: java sockets stream

请原谅我,如果这很简单,因为我对服务器/客户端编码很新,并且正在尝试自学。

我已经制作了一个服务器和客户端,它们运行良好,并且在两个都运行时完美交互。我遇到的问题是当我退出包含客户端的应用程序时。我一说,我就得到一个无休止的错误说:

null -- Connection reset
java.net.SocketInputStream.read(SocketInputStream.java:113)
java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
java.io.BufferedInputStream.read(BufferedInputStream.java:317)
sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:107)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:93)
java.io.InputStreamReader.read(InputStreamReader.java:151)

在客户端对套接字的引用上调用close()方法似乎对此没有任何影响。我尝试从服务器调用if(socket.isClosed()),但它表示即使在客户端关闭它之后它仍然处于打开状态。

当我的应用程序退出时,如何正常处理关闭流和套接字?

2 个答案:

答案 0 :(得分:1)

如果可能,您可以发送一些命令,告诉您的服务器应用程序关闭连接。

答案 1 :(得分:-1)

显然,您正在阅读EOS并且可能仍在服务器中发送数据。与Alexander Pavlov的回答相反,您不需要发送特殊消息,因为您在阅读时已经获得了EOS指示,但您需要记下客户发送的EOS指示。