2010-05-10 4 views
3

당신이 도울 수 있으면 좋겠습니다. 임 꽤 새로운 progamming 및 인스턴트 메신저 자바 소켓 놀아.자바 소켓 반환 사실

문제는 아래 코드와 같습니다. 어떤 이유에서든 commSocket = new Socket(hostName, portNumber);이 서버에 연결되어 있지 않은 경우에도 true를 반환합니다 (아직 구현되지 않은 서버!). 이 상황과 관련된 아이디어가 있습니까?

hostName은 내 로컬 컴퓨터 IP를 전달하고 포트는 수동으로 선택한 포트입니다.

public void networkConnect(String hostName, int portNumber){ 

    try { 
     networkConnected = false; 
     netMessage = "Attempting Connection"; 
     NetworkMessage networkMessage = new NetworkMessage(networkConnected, netMessage); 

     commSocket = new Socket(hostName, portNumber); 

     // this returns true!! 
     System.out.println(commSocket.isConnected()); 

     networkConnected = true; 
     netMessage = "Connected: "; 


     System.out.println("hellooo"); 

    } catch (UnknownHostException e){ 
     System.out.println(e.getMessage()); 

    } catch (IOException e){ 
     System.out.println(e.getMessage()); 

    } 
} 

감사합니다.

EDIT : new Socket (.., ..); 그것은 isnt 그것을 차단 무엇입니까? 나는 그 사건이 예외없이 처리 되었다면 우리는 참된 연결 고리를 가지고 있다고 생각 했는가?

편집 : 나는 안티 바이러스로 놀았지만 지금은 효과가 있습니다!

+2

'새로운 소켓 (...)'** 확실히 ** true를 반환하지 않습니다. 예외를 throw하지 않으면 새로운'Socket' 객체를 반환합니다. –

답변

3

며칠 전 회사의 컴퓨터에서 똑같은 상황이 발생하여 몇 시간 동안 검색했습니다.

바이러스 백신을 검사 할 때 일부 바이러스 백신 (예 : E*** N**32)은 대상 포트에서 수신 대기중인 항목이 없더라도 연결을 설정하는 라이브 TCP 검색을 사용하지만 나중에 소켓에서 읽기/쓰기를 시도 할 때 다시 설정합니다.

는 코드에 이것을 추가

commSocket.getOutputStream().write(0); 
commSocket.getInputStream().read(); 

지금 SocketException이 얻을 경우, 당신은 정말 바이러스 백신을 변경하는 것이 좋습니다.

또는 소켓을 만든 직후 응용 프로그램에 중단 점을 설정 한 다음 netstat -ano (Windows)을 사용하여 소켓의 다른 끝점 (연결된 경우 컴퓨터에 있어야 함)과 연결된 프로세스 ID를 확인하십시오 localhost에).

나는 당신의 안티 바이러스를 비활성화 할 수 제안하지만, 어떤 경우에는 심지어 자신의 깨진 라이브 TCP 스캔 드라이버를 언로드하는 데 도움이되지 않습니다 ...

+0

commSocket.getInputStream(). write (0); 작동하지 않습니다. 나는 write 메소드를 찾을 수 없었다. – iTEgg

+0

슈퍼! 방금 바이러스 백신을 정상 모드로 전환하고 지금은 작동 중입니다! 위대한 팁! – iTEgg

+1

@ikurtz는 출력 스트림에 쓰기를 사용하고 입력 스트림에서 읽기를 사용합니다. :-) – corsiKa

1

Socket constructor이 즉시 연결되고 성공하지 못하면 IOException이 표시됩니다. 따라서 분명히 서버에 성공적으로 연결되어 있습니다 (이것은 자신이 직접 만들지 않은 서버 일 수 있습니다).

+0

로컬 IP로 로컬 컴퓨터에서 테스트 중입니다. 따라서 실행중인 서버가 없습니다. 기묘한? – iTEgg

+0

로컬 IP를 사용하는 경우 해당 IP를 서버로 사용할 수 있습니다. –

+0

서버가 실행되지 않고 연결 되나요? – iTEgg