java.net.SocketException : Connection Reset. 如何停止这个?

标签 java sockets exception tcp

每次我关闭客户端上的 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/

相关文章:

java - 设置非常大的打开文件限制的副作用?

java - Jquery 未捕获语法错误

linux - linux挂载应用程序如何修改源端口

sockets - 什么是python zeromq中的zmq.ROUTER和zmq.DEALER?

javascript - 与Node.js的长连接,如何减少内存使用,防止内存泄漏?还与 V8 和 webkit-devtools 相关

c++ - 具有 VirtualProtect 的 PAGE_GUARD 在执行访问时不会引发异常

java - 使用 Java Servlet/jsp 将产品添加到数据库

java - 并行和单线程代码在 Java 中具有相对相同的性能

c++ - 在实时环境中仍然不希望出现异常吗?

java - 获取异常原因的唯一标识符