Warum eine “java.net.SocketException: Broken pipe" auftreten?
Schrieb ich eine einfache socket-Programm, es funktioniert gut, aber mein Freund verwenden Sie einen port scan-tool, wenn Sie scan auf dem port ich verwende, es cash mit "java.net.SocketException: Broken pipe" Fehler, was ist geschehen? und wie es zu lösen?
providerSocket = new ServerSocket(portNum);
connection = providerSocket.accept();
if (connection.getOutputStream() != null) {
//this line crash!!!
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();
}
Detail-Fehler in der Konsole:
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)
connection.getOutputStream()
nicht null zurückgeben. Der test ist sinnlos.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige port-Scanner arbeiten, indem Sie beginnen, eine Verbindung zu öffnen und dann sofort beenden es. Ihr server ist nicht programmiert, um mit einem Ausfall der Verbindung, weil Sie nicht im code für diese Möglichkeit. Müssen Sie verwenden einen try/catch zum abfangen, dass Zustand und erholen. Auch, sollten Sie wahrscheinlich das Weiterreichen der Verbindung an einen separaten thread für die Verarbeitung, so dass Ihr Haupt-Programm können weiterhin neue verbindungen (und sendet Sie an threads behandelt werden).
Ich denke, das passiert, wenn die Gegenstelle hat die Verbindung geschlossen;
Den Grund für Ihr problem kann hier sein:
Und Sie sollten erhöhen "backlog" - parameter der ServerSocket, zum Beispiel
Entweder eine throws-Klausel mit SocketException und IOException oder setzen versuchen Sie, fangen Sie endlich, wie mein Freund oben vorgeschlagen.Endlich vergessen Sie nicht, schließen Sie alle streams, die Sie verwenden.Und überprüfen Sie auch die Portnummer im client-und server-seitige Programme.Hopw dies wird Ihnen helfen.