2010-05-27 2 views
3

Android에서 네트워크 연결 절차에 대해 의문의 여지가 있습니다.Android에서 Wi-Fi 및 3G를 통한 일정한 연결

내 시나리오는 입니다. 3G를 사용하는 TCP를 통해 원격 서버에 연결하고 있습니다. 연결된 후에 Wi-Fi를 사용할 수있게되었습니다. Android가 Wi-Fi로 전환했습니다. 그리고 서버와의 연결이 아직 살아 있음은 연결이 끊어짐을 의미합니다.

여기 하나의 사실을 알고 싶습니다. N/W가 3G에서 Wi-Fi로 전환되면 안드로이드 (또는 다른 장치)도 IP 주소를 변경합니까? IP가 변경되면 이전 연결이 유효합니까? (즉, 새 IP에 다시 연결해야 함을 의미합니다.)

미리 감사드립니다.

+0

당신이 말한대로 연결이 "끊겼다"는 것을 어떻게 알 수 있습니까? 예를 들어 HTTP는 상태 비 저장이며 각 연결은 이전 연결과 독립적 일 수 있습니다. –

+0

늦게 답장을 드려 죄송합니다. 나는 "read()"루프를 가지고 매 3 초마다 차단을 해제 할 것이다. 연결이 끊어지면 "read()"는 '-1'을 반환합니다. 하지만 내 코드는 '-1'을 반환하지 않고 매 3 초마다 'read()'를 차단하고 차단 해제 할 수 있습니다. – Andhravaala

답변

2

내가 이해하는 방식은 IP 주소가 변경된다는 것입니다. 전화가 WiFi로 전환되면 장치를 IP 주소로 지정하는 것이 라우터입니다. 나는 안드로이드가 IP 스택을 재시작하고있을 것이라고 추측한다. (단지 추측이다.) 나는 장치가 같은 IP 주소를 가지도록하는 "핸드 오프"메커니즘을 본 기억이 없다. 이론적으로는 이론적으로 가능할 수도 있지만 복잡 할 수 있는지 잘 모르겠습니다 :) 또한 Android에는 네트워크 인터페이스 카드가 하나뿐이므로 IP 주소를 모두 유지할 수는 없습니다. WiFi로 전환하면 Wi-Fi IP 주소 만 유지됩니다.

내 경험에서 관찰 않았다

,이 같은 시나리오는 실패합니다

이 가 안드로이드는 3G를 통해 연결되어
  • 처음
  • 안드로이드 응용 프로그램은 HTTP 웹 서버에 GET
  • 안드로이드가 더 나은 감지 보냅니다
      WiFi 연결 및 3G에서 전환

    이 경우 GET 요청이 실패합니다.

    가능한 솔루션 :

    • 여러 번 시도 : 3 회 (또는 다른 매직 넘버를하지만, 3은 대부분의 경우에 나를 위해 일한) 대부분의 문제를 해결해야 try-catch-repeat를 사용하여.

      if(!isOnline()) { 
          Log.e("OFFLINEERROR", "No Network Connectivity"); 
      } 
      
      public boolean isOnline() { 
          try { 
          ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
          return cm.getActiveNetworkInfo().isConnectedOrConnecting();   
          } catch(Exception e) { 
          //Returned a null so no Internet connection! 
          return false; 
          } 
      } 
      
    • 덩어리 당신의 전송 (당신이 당신의 연결이 끊어 질 경우에도이 방법은, 당신은 여전히 ​​이전을 완료 할 수 있습니다) :이 같은

    • 사용 코드는 네트워크 연결을 확인하고 거기서부터 진행합니다.

    희망이 있습니다.

  • +0

    전설, 답변 해 주셔서 감사합니다. IP 주소가 변경되는 것이 옳습니다. 따라서 클라이언트는 새로운 세션을 모두 시작합니다. 문제점 : 2 세션 동안 내 PIN 문제가 발생하지 않아 원격 서버가 이전 세션을 닫지 못했습니다. 어쨌든, 그것은 다른 문제입니다. 좋은 설명을 주셔서 대단히 감사합니다. – Andhravaala

    관련 문제