【问题标题】:BufferedReader.readLine() gives error java.net.SocketException: Software caused connection abort: recv failedBufferedReader.readLine() 给出错误 java.net.SocketException:软件导致连接中止:recv 失败
【发布时间】:2011-02-03 05:09:39
【问题描述】:

我正在尝试对我的程序进行编码,以便缓冲阅读器从我的 tcp 客户端获取 readLine() 中的某些内容,但是一旦程序执行,我就会收到此错误

   Mar 31, 2010 11:03:36 PM deswash.DESWashView$5 run
SEVERE: null
java.net.SocketException: Software caused connection abort: recv failed
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.readLine(BufferedReader.java:299)
        at java.io.BufferedReader.readLine(BufferedReader.java:362)
        at deswash.DESWashView$5.run(DESWashView.java:448)

以下代码中的 car=in.readLine() 抛出错误

 public void getCar(){
        Thread gettingCars = new Thread(){
            @Override
            public void run(){
                try {
                    car = in.readLine();
                    if(!(car.equals(null))){
                        StringTokenizer st = new StringTokenizer(car,";");
                        int carTime = Integer.parseInt(st.nextToken());
                        finTime.setText(""+((Integer.parseInt(currentTime.getText()))+washTime));
                        currentTime.setText(""+carTime);
                        eventTextArea.append(""+car+"\n");
                    }
                } catch (IOException ex) {
                    Logger.getLogger(DESWashView.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        };
        gettingCars.start();
        doOnce=false;
    }

【问题讨论】:

  • 你能发布一些给你这个错误的代码吗?
  • 请查看此链接blogs.sun.com/oleksiys/entry/… 这里提到了一种情况,例如在某些请求发送到服务器后连接关闭。因此,当您尝试接收数据时,您会收到此异常
  • @sreejith 博客搞错了。如果对等方关闭连接,则异常将读取“对等方重置连接”。这是“软件导致的连接中止”。不同的东西。

标签: java tcp


【解决方案1】:

来自 MSDN:

WSAECONNABORTED (10053)软件导致连接中止

连接中止是由您的主机内部引起的。软件导致连接中止,因为套接字队列中没有空间,并且套接字无法接收更多连接。

WinSock 描述:当本地网络系统中止连接时,可能会发生错误。如果 WinSock 在数据重传失败后中止已建立的连接(接收方从不确认在数据流套接字上发送的数据),则会发生这种情况。

TCP/IP 方案:如果本地系统没有收到发送数据的 (ACK) 确认,则连接将超时。如果 (FIN)ish TCP 数据包没有被确认,它也会超时(即使 FIN 被确认,如果没有返回 FIN,它最终也会超时)。

这似乎在 WindowsXP 中发生得更多,而且似乎也可能与 Windows 防火墙设置有关。无论如何,重点是中止是在本地机器内部发起的。

这是一个措辞愚蠢的消息。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 2011-10-09
    • 2017-04-20
    • 2012-02-20
    • 2019-07-28
    • 2012-04-15
    • 2012-09-10
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多