2010-04-01 40 views
1

我试图编写我的程序,以便缓冲读取器从我的tcp客户端获取readLine()中的某些内容,但出现此错误一旦程序执行BufferedReader.readLine()给出错误java.net.SocketException:软件导致连接中止:recv失败

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) 

轿厢= 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; 
    } 
+0

可以请你发布一些给你这个错误的代码吗? – Hector 2010-04-01 03:10:52

+0

请检查此链接 http://blogs.sun.com/oleksiys/entry/strange_software_caused_connection_abort 这里提到了一个场景,就像连接关闭后,一些请求发送到服务器。因为这一点,当你试图接收数据,你会得到这个异常 – sreejith 2010-04-01 05:54:50

+0

@sreejith博客是错误的。如果对等方关闭连接,则例外将读取“由对等方重置连接”。这是'软件导致连接中止'。不同的东西。 – EJP 2013-06-06 03:00:32

回答

0

从MSDN:

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

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

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

TCP/IP场景:如果本地系统未收到发送数据的(ACK)请求,则连接将超时。如果(FIN)ish TCP数据包未被ACK确认(即使FIN为ACK'd,如果FIN未返回,它最终也会超时),它也会超时。

它似乎发生在WindowsXP更多,它似乎也可能与Windows防火墙设置有关。无论如何,突出的一点是中止已经发生在本地机器内部。

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

相关问题