每次我关闭客户端上的 TCP 服务器时,都会出现此异常:
java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:196) at java.net.SocketInputStream.read(SocketInputStream.java:122) at java.net.SocketInputStream.read(SocketInputStream.java:210) at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2293) at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2473) at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2543) at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2615) at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2764) at java.io.ObjectInputStream.readByte(ObjectInputStream.java:916) at client.ListenFromServer.run(ListenFromServer.java:33)
这是我的两段代码,一段是我的 TCPClient,它通过套接字连接到服务器,并且还创建一个监听器来监听来自服务器的消息:
TCPClient.java: http://pastie.org/private/msbnuhxyevxjlsdq1wvhow
ListenForServer.java: http://pastie.org/private/pav4azrakgfz31culrrg2a
如何阻止此异常发生?在 ListenForServer.java 的 while 循环中,我检查套接字是否关闭,如果是,我就跳出循环,但仍然遇到此异常。
捕获它的最佳方法是什么,因为我的程序在退出时无法正确关闭,所以我必须从 Netbeans IDE 中手动关闭它。
最佳答案
In my while loop in ListenForServer.java, I make a check to see if the socket is closed, and if it is, I break out of the loop, yet I'm still getting this exception.
是的,你做到了,但是当套接字关闭时你仍在监听输入流。
您需要捕获套接字异常或更改您的 while 循环
关于java.net.SocketException : Connection Reset. 如何停止这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23730280/