Ich habe den folgenden Code-Snippet:ServerSocket- Verhalten akzeptieren
if (servsock == null) {
System.out.println("HELLO1!");
servsock = new ServerSocket(63456, 10);
System.out.println("HELLO2!");
}
try {
System.out.println("HELLO3!");
sock = servsock.accept();
} catch (Exception ex) {
if (servsock != null && !servsock.isClosed()) {
System.out.println("PICO1!");
servsock.close();
}
if (servsock != null && servsock.isClosed()) {
System.out.println("PICO2!");
manager.log("SERVER SOCKET closed and nulled.");
servsock = null;
}
sock = servsock.accept();
}
System.out.println("HELLO4!");
is = sock.getInputStream();
System.out.println("HELLO5!");
bis = new BufferedInputStream(is);
System.out.println("HELLO6!");
Dieser Code in einem run()
Methode des runnable ausgeführt wird, und wenn die Datei übertragen wurde, wird angenommen, jede Kommunikation zu stoppen.
Das Kuriose ist, dass es keine Schleife ist. Der Code akzeptiert, macht eine Dateiübertragung, aber ich verstehe nicht, warum der HELLO1 wieder auf meinem Bildschirm ist. Also, das zweite Mal, wenn ich versuche, diesen Code erneut auszuführen, gibt mir "Verbindung verweigert".
Die "10" war ein Hack von mir, aber der ursprüngliche Code, verwendet nie auch Backlog.
Irgendwelche Vorschläge bitte?
Der Code läuft die bisherige Ausführung ist, dass:
final IClientInterface clientInterface = client.getClient();
final prgHolder = new ProgHolder();
Pong ftppong = new Pong();
ftppong.setFileNames(bout64.toByteArray());
ftppong.setDstFolder(dstFolder);
prgHolder.setName("pong");
prgHolder.setTask(pong);
Thread t = new Thread(new Runnable() {
public void run() {
try {
IClientInterface.execute(prgHolder);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
t.start();
Das genaue Problem ist jetzt, dass wenn ich den neuen Serversocket (63456) Befehl erreichen, erhält der Kunde eine „Connection Refused“, aber das Programm im entfernten PC, ist weit offen und breiter Zuhörer! "netstat" bestätigt das!
Ich wiederhole (zweites Mal) das Programm von einem alternativen Fenster, übergibt alle Hallo-Nachrichten und schließt den Job ab!
Dann stoppt der Thread im entfernten PC und löst den Port 63456!
Warum schlägt es als Code fehl, akzeptiert aber eingehende Anfragen?
Ok Ich habe den genauen Fehlerpunkt gefunden. Es ist nach dem Thread. Nach dem t.start(); Wo ich das mache: "Socket sock = new Socket (" distancemaching ", 63456); Der Code hungs genau dort. Direkt nach dem Thread. Nach der Theorie sollte ich die Server-Thread-Setup haben und der Client bekommt die Verbindung damit kleines snippet, richtig? Es scheint, dass es nicht funktioniert. – hephestos
windows windows: kein problem. Windows-Linux als server, um verbindung zu akzeptieren, scheitert. – hephestos