2013-08-23 2 views
1

문제가 ip 주소가 연결에 할당됨을 확인했습니다 .EndpointPair가 wi-fi 직접 네트워크 어댑터의 IP를 운반하고 있으며 포트를 여는 방법을 모르겠습니다. 특정 ip, ip는 Windows PC와 다른 점이 있습니다. Windows는 포트 5009에서 연결을 수신하고 연결은 wi- fi ip를 사용할 때 설정하지만 wi- fi 직접 ip 주소를 사용하면 문제가 있습니다.WIFI 직접 IP 주소 문제

장치와 Windows 8.1 응용 프로그램 간의 wi-fi 직접 연결은 괜찮습니다. 그런 다음 소켓 연결을 기다리고 있지만 문제가 될 수 있습니다.

나는 비주얼 스튜디오에 오류가 발생합니다 : 대상 컴퓨터가 적극적으로 거부했기 때문에

없음 연결이 될 수 있습니다. (HRESULT에서 예외 : 0x8007274D) 안드로이드 사이드 I에서

   private void initiateClientSocket(String hostAddress) { 


     int timeout = 10000; 
     int port = 5009; 

     InetSocketAddress socketAddress 
      = new InetSocketAddress(hostAddress, port); 

     try { 
      Socket socket = new Socket(); 
      socket.bind(null); 
      socket.connect(socketAddress, timeout); 
     } catch (IOException e) { 
      Log.e(TAG, "IO Exception.", e); 
     } 

     // TODO Start Receiving Messages 
     } 

: 나는이 코드를 사용하고있는 안드로이드 측면에서

String deviceSelector = WiFiDirectDevice.GetDeviceSelector(); 

     DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(deviceSelector); 

     if(deviceCollection.Count > 0) 
     { 
      try 
      { 
       wfdDevice = await WiFiDirectDevice.FromIdAsync(deviceCollection[0].Id); 

       wfdDevice.ConnectionStatusChanged +=ConnectionStatusChangedNotficationHandler; 



       var endpointPairs = wfdDevice.GetConnectionEndpointPairs(); 
       EndpointPair connectionEndpointPair = endpointPairs[0]; 

       try 
       { 
        connectionEndpointPair.RemoteServiceName = "5009"; 


        StreamSocket socket = new StreamSocket(); 
        await socket.ConnectAsync(connectionEndpointPair); 

        string s = "hello"; 
       }catch (Exception err) 
       { 
        string s = err.Message; 
        s = err.StackTrace; 
       } 
      } 
      catch (Exception err) 
      { 
       string error = err.Message; 

      } 

윈도우 측면에서

은이 코드를 사용하고 오전 :

java.net.UnknownHostException : 호스트가 확인되지 않음 : 내 IP

어떤

감사합니다 :) 도와주세요 수

+0

당신이 직접 와이파이 작동 했습니까? 나는이 작품을 만들 수 있는지 알아 내려고 애 쓰고있다. – xrklvs

답변

2

내가 꽤 창에 코드를 이해하지만, 다음 코드에 문제가 있다고 생각하지 않습니다는

connectionEndpointPair.RemoteServiceName = "5009"; 

는 것을 "RemoteServiceName 보인다 "포트 번호 5009와는 아무런 관련이 없습니다. struct/object"connectionEndpointPair "의 다른 필드를 확인하고 적절한 설정을하십시오.

+0

안녕 다니엘 감사합니다 나는 문제가 연결에 할당되는 IP 주소임을 발견했습니다 .EndpointPair는 Wi-Fi 직접 네트워크 어댑터의 IP를 운반하고 있습니다. 그 특정 IP에서 포트를 여는 방법을 모르겠다. ip는 포트 5009에서 연결을 듣고 내 PC에서 핑할 때와 다르다. wi-fi 직접 IP 주소입니다. – CRL88

+0

RemoteServiceName은 포트 번호를 설정할 수있는 올바른 속성입니다. _ RemoteServiceName 속성에는 원격 네트워크 대상의 서비스 이름 또는 TCP 또는 UDP 포트 번호가 포함될 수 있습니다 ._ (MSDN : http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.endpointpair.remoteservicename.aspx) –

+0

WiFi 직접 IP로 서로 핑 할 수 있습니까? 포트 번호는 IP 주소와 독립적입니다. 나는 포트 5009를 청취하는 것이 두 IP 주소로부터 들어오는 데이터를 수신 할 것이라고 생각한다. 핑 (ping)을 할 수 있다면 5009에서 데이터를 수신 할 수 있어야합니다. – Daniel

4

안드로이드 전화와 windows 컴퓨터 사이에 직접 WIFI 연결이 있더라도 tcp 연결을 위해 서버와 클라이언트가 필요합니다.

응용 프로그램의 목적을 모르지만 Windows 컴퓨터가 서버에 더 적합한 선택이라고 가정합니다. 따라서 소켓에 연결하는 대신 컴퓨터에서 포트에 대한 수신기를 열어야합니다.

선택한 StreamSocket 클래스와 관련된 서버 클래스는 StreamSocketListener입니다. 여기 문서를 찾을 수 있습니다

  • 은 StreamSocketListener 만들기 : http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx

    작업의 일반적인 순서에 대한이 문서의 단락도 있습니다.

  • Control 속성을 사용하여 StreamSocketListenerControl 개체를 검색하고 필요한 소켓 서비스 품질을 설정합니다.
  • ConnectionReceived 이벤트를 이벤트 처리기에 할당하십시오.
  • BindServiceNameAsync 또는 BindEndpointAsync 메서드를 호출하여 로컬 TCP 포트 또는 서비스 이름에 바인딩합니다.
  • 연결이 수신되면 StreamSocketListenerConnectionReceivedEventArgs 개체를 사용하여 만들어진 StreamSocket 개체로 Socket 속성을 검색합니다.
  • StreamSocket 개체를 사용하여 데이터를 보내고받습니다.
  • 들어오는 네트워크 연결 수신 대기 및 수신을 중지하고 StreamSocketListener 개체와 관련된 관리되지 않는 모든 리소스를 해제하려면 Close 메서드를 호출하십시오. 접속을 받았을 때에 작성된 StreamSocket 객체는 영향을받지 않고 필요에 따라서 계속 사용할 수 있습니다.

나는이 특별한 클래스와 함께 일하지 않은,하지만 TCP의 기본은 항상 동일합니다 ...