2013-07-31 37 views
0

我有一個程序有時會遇到errorjava.net.SocketException。有沒有辦法讓客戶端程序在遇到這個錯誤時(並且只有)遇到這個錯誤才能「執行」錯誤?完整的錯誤是處理java.net.SocketException

java.net.SocketException: Software caused connection abort: socket write error 

這裏是我現在擁有的一個總結。

public void run() { 
    try { 
     //some code that causes the SocketException 
    } 

    catch (SocketException e) { 
    System.out.println("I recognize the SocketException"); 
    } 
} 

但是,儘管出現錯誤,它仍然不會打印該行。

以下是完整的錯誤

java.net.SocketException: Software caused connection abort: socket write error 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(Unknown Source) 
    at java.net.SocketOutputStream.write(Unknown Source) 
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source) 
    at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source) 
    at java.io.ObjectOutputStream.writeNonProxyDesc(Unknown Source) 
    at java.io.ObjectOutputStream.writeClassDesc(Unknown Source) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
    at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
    at java.io.ObjectOutputStream.writeFatalException(Unknown Source) 
    at java.io.ObjectOutputStream.writeObject(Unknown Source) 
    at (...).java:61) 
    at (...).java:164) 
+0

由於網絡可靠性原因,此問題似乎是無關緊要的,因爲它太本地化了。 – EJP

+0

請注意,在這種情況下,由於網絡可靠性原因,連接已由您而不是對等點丟棄。請參見[官方原因爲'軟件導致連接中止'](http://stackoverflow.com/questions/2126607/official-reasons-for-software-caused-connection-abort-socket-write-error)。 – EJP

回答

1

這取決於客戶機或服務器是否是一個拋出異常。

無論採用哪種方式,您都應該可以在代碼中添加一個try-catch塊。

try { 
    //code 
} catch (SocketException e) { 
    // Handle the error 
} 

如果服務器引發錯誤,並且希望用戶來處理,客戶端應該拋出一個異常,由於連接丟失的情況(這是此異常的樣子)。或者,如果服務器拋出一個錯誤但不會崩潰,只需讓服務器向客戶端發送一個錯誤信號。

無論哪種方式,有了更多的信息,我可以給你一個更好的解決方案。

+0

那麼客戶端遇到了錯誤(它出現在客戶端軟件的控制檯中),因爲它失去了連接。 – user760220

+0

如果是這種情況,那麼try-catch塊將工作得很好。 – user2077035

+0

我試過這沒用。請看我更新的問題。 – user760220

相關問題