2013-08-09 4 views
1

나는 UDP 소켓을 통해 서로 통신하는 서버와 클라이언트를 가지고있다. 서버가 포트 10002를 열고 들어오는 데이터 그램을 수신 대기 중입니다.IP 주소의 자동 발견

클라이언트가 서버 ip를 얻으려면 서버가 응답하는 하나의 브로드 캐스트 데이터 그램을 보냅니다. 서버의 IP 주소를 찾는 담당하는 클라이언트 코드는 다음과 같습니다이 실행되면

private IPEndPoint GetServerEP(TimeSpan timeout, UdpClient udpclient) 
    { 
     IPEndpoint server = new IPEndPoint(IPAddress.Broadcast, 10002); 
     byte[] data = GetDiscoverDatagram(); 

     _udpclient.EnableBroadcast = true; 
     udpclient.Send(data, data.Length, server); 

     try 
     { 
      udpclient.Client.ReceiveTimeout = (int)timeout.TotalMilliseconds; 
      udpclient.Receive(ref server); 
     } 
     catch (SocketException e) 
     { 
      string msg = string.Format("Server did not respond within {0} ms", timeout.TotalMilliseconds); 
      throw new TimeoutException(msg, e); 
     } 

     return server; 
    } 

, I는 서버가 실제로 같은 포트 바운드 패킷 브로드 캐스트 데이터 그램을 수신하고 응답하는 것을 볼 수있다 클라이언트가 보낸. 그러나 클라이언트는 아무것도 수신하지 않으며 시간 초과가 발생합니다.

무엇이 누락 되었습니까?

답변

0

Stupid me (또는 바보 같은 방화벽). 코드가 작동했지만 방화벽이 서버의 응답 패킷을 차단했습니다. 모든 것을 비활성화 한 후에는 매력처럼 작동합니다.

관련 문제