处理java.net.SocketException

时间:2013-07-31 19:45:40

标签: java multithreading sockets try-catch

我有一个有时会遇到errorjava.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)

1 个答案:

答案 0 :(得分:1)

这取决于客户端或服务器是否是抛出异常的那个。

无论哪种方式,您都应该能够在代码周围添加try-catch块。

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

如果服务器抛出错误并且您希望客户端处理这种情况,则客户端应该因为连接丢失而抛出异常(这就是此异常的样子)。或者,如果服务器抛出错误但没有崩溃,只需让服务器向客户端发送一个错误信号。

无论哪种方式,只要获得更多信息,我都可以给你更好的回复。