为什么会出现"java.net.SocketException:Broken pipe"?

DNB*_*ims 7 java sockets

我写了一个简单的套接字程序,它工作正常,但我的朋友使用端口扫描工具,当它扫描到我正在使用的端口时,它用"java.net.SocketException:Broken pipe"错误,发生什么事了?以及如何解决?

providerSocket = new ServerSocket(portNum);
connection = providerSocket.accept();
if (connection.getOutputStream() != null) {
    //this line crash!!!
    out = new ObjectOutputStream(connection.getOutputStream());
    out.flush();

}
Run Code Online (Sandbox Code Playgroud)

控制台的详细错误:

java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1847)
    at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1756)
    at java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:230)
Run Code Online (Sandbox Code Playgroud)

Jim*_*son 8

某些端口扫描程序通过开始打开连接然后立即终止它来工作.您的服务器未编程为处理连接失败,因为您没有为此可能性编码.您将需要使用try/catch来捕获该条件并进行恢复.此外,您可能应该将连接切换到单独的线程进行处理,因此您的主程序可以继续接收新连接(并将它们发送到要处理的线程).