У меня есть следующий фрагмент кода:
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!");
Этот код запускается в методе run()
исполняемого файла, и, когда файл был передан, он должен прервать каждое соединение.
Любопытно, что это не петля.Код принимает, выполняет передачу файлов, но я не понимаю, почему HELLO1 снова на моем экране.Таким образом, во второй раз, когда я пытаюсь снова запустить этот код, выдается сообщение «Отказано в соединении».
«10» было хаком с моей стороны, но оригинальный код также никогда не использует отставание.
Любое предложение, пожалуйста?
Код, выполняющийся при выполнении предыдущего кода, таков:
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();
Точная проблема заключается в том, что когда я достигаю нового ServerSocket (63456)По команде клиент получает «Отказано в соединении», но программа на удаленном ПК широко открыта и широко слушает!«netstat» подтверждает это!
Итак, я перезапускаю (второй раз) программу из альтернативного окна, пропускаю все сообщения HELLO и завершаю работу!
Затем поток останавливается на удаленном ПК и отсоединяет порт 63456!
Почему он не работает как код, но принимает входящие запросы?