을 받아 내가 다음 코드 조각이 :ServerSocket의 행동
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이 왜 다시 화면에 있는지 이해할 수 없습니다. 따라서 두 번째로이 코드를 다시 실행하려고하면 "Connection refused"가 표시됩니다.
"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();
정확한 문제는, 내가 (63456) 명령에 새로운 ServerSocket의에 도달하면, 클라이언트는 "거부 연결"하지만, 프로그램을 얻을 수 있음 멀리있는 PC에서, 넓고 열린 청취자입니다! "netstat"은 그것을 확인합니다!
그래서 다른 창에서 프로그램을 다시 실행하고 모든 HELLO 메시지를 전달하고 작업을 완료합니다!
그러면 스레드가 먼 PC에서 멈추고 포트 63456을 바인딩 해제합니다!
코드로 실패하지만 수신 요청을 수락하는 이유는 무엇입니까?
나는 오류의 정확한 지점을 발견했다. 쓰레드가 끝나면. t.start(); "Socket sock = new Socket ("distantmaching ", 63456);이 코드는 스레드 바로 다음에 있습니다. 이론에 따르면 서버 스레드를 설정하고 클라이언트가 그 소켓과 연결을 설정해야합니다. 작은 조각, 맞죠? 작동하지 않는 것 같아요 . – hephestos
windows windows : 문제 없습니다. Windows-Linux에서 서버가 연결을 받아 들일 수 없습니다. – hephestos