1

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

我制作了一个服务器和客户端,它们在运行时都可以正常工作并完美交互。我遇到的问题是当我退出包含客户端的应用程序时。一旦我这样做,我就会收到一个无休止的错误说:

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()),但它说即使在客户端关闭它之后它仍然打开。

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

4

2 回答 2

1

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

于 2012-11-30T13:13:50.073 回答
-1

显然,您正在阅读过去的 EOS,并且可能仍在服务器中发送数据。与 Alexander Pavlov 的回答相反,您不需要发送特殊消息,因为您在阅读时已经收到 EOS 指示,但您需要注意客户端关闭时发送的 EOS 指示。

于 2012-11-30T19:00:56.947 回答