这个问题在这里已有答案:
每次我关闭我的TCP服务器,在我的客户端,我得到这个例外:
java.net.SocketException:连接重置
在java.net.SocketInputStream.read(SocketInputStream.java:196)
在java.net.SocketInputStream.read(SocketInputStream.java:122)
在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)
在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中手动关闭它 .
1 回答
是的,但是当套接字关闭时你仍然在听取输入流 .
你需要捕获套接字异常或更改你的循环