2012-04-16 3 views
0

나는 안드로이드에있는 두 개의 에뮬레이터 사이에 소켓 채널을 만들려고했다. 나는 (IP, 포트)에서 다른 에뮬레이터를 시작하지 않은자바에서 연결이 설정되었는지 확인하는 방법은 무엇입니까?

public SocketChannel connect2node(String ip, int port) { 
     SocketChannel client = null; 
     try { 
      client = SocketChannel.open(new InetSocketAddress(ip, port)); 
      client.configureBlocking(false); 
      client.register(selector, SelectionKey.OP_READ); 

      if (!client.isConnected()) { 
       Log.i("server connection", "error"); 
       return null; 
      } 
     } catch (IOException e) { 
      String s = e.getMessage(); 
      e.printStackTrace(); 
     } 

     return client; 
    } 

참고 연결이 항상 실패 의미 : 나는 다음과 같은 코드를 썼습니다. 나는 위의 코드를 디버깅을 시작하면, 그것은 다음 catch 블록으로 이동

if (!client.isConnected()) { 

에 왔을 때 나는 발견 catch 블록에서

 e.printStackTrace(); 

다른 모든 라인이 실행되지 않으며, 클라이언트는 반환 할 때 null이 아닙니다. 그렇다면 연결이 성공적으로 설정되었는지 여부를 어떻게 알 수 있습니까?

+0

스택 추적은 무엇을 말합니까? –

+0

아무 것도 인쇄하지 않습니다. 나는 e.printStackTrace()도 생략했다고 생각한다. – stackunderflow

+0

불가능합니다. 다시 컴파일하고 다시 테스트 해보길 권합니다. 내 대답도 참조하십시오. – EJP

답변

0

isConnected() 테스트는 의미가 없습니다. open()이 연결에 실패하면 예외가 발생합니다.

+0

open()이 성공하고 isConnected()가 예외를 throw 할 때까지 코드가 실행됩니다. – stackunderflow

+0

@zwx 네, 그 질문을 읽었습니다. 조금이라도 내 대답에 영향을 미치지 않습니다. 테스트를 제거하십시오. 그것은 쓸데 없다. 코드의 해당 지점에서 소켓을 연결할 수 없습니다. – EJP

+0

네, 맞습니다. 'isConnected()'테스트를 제거한 후에는 예외를 throw하지 않고 잘 돌아갑니다. 하지만 내 질문은 어떻게 연결 여부를 확인하는 것입니다? 'client'가 널이 아닌 값으로 리턴되기 때문에, 나는 성공적인 연결과 구별 할 수 없습니다. – stackunderflow