2010-04-01 121 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防火牆設置有關。無論如何,突出的一點是中止已經發生在本地機器內部。

這是一個愚蠢的措辭消息。

相關問題