2011-05-11 61 views
3

我正在用System.Net.Sockets.UdpClient類的幫助開發動作多人遊戲。從UdpClient收到的UDP包中獲取客戶端IP

這是兩個玩家,所以應該打開一個服務器,並等待傳入​​的連接。另一個玩家輸入主機IP並嘗試發送「ping」,以確保可以連接並且存在開放的服務器。主人然後迴應一個「乒乓球」。

一旦遊戲運行,兩者都必須互相發送udp消息,所以他們都需要對手的ip地址。

當然,服務器也可以輸入客戶端的IP,但這似乎是不必要的。

當收到「ping」消息時,如何從udp軟件包獲取客戶端IP?

這裏是(服務器等待平)我接收代碼:

private void ListenForPing() 
    { 
     while (!closeEverything) 
     { 
      var deserializer = new ASCIIEncoding(); 
      IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0); 
      byte[] recData = udp.Receive(ref anyIP); 
      string ping = deserializer.GetString(recData); 
      if (ping == "ping") 
      { 
       Console.WriteLine("Ping received."); 
       InvokePingReceiveEvent(); 
      } 
     } 
    } 

回答

12

在你的榜樣,當客戶端連接時,anyIP IPEndPoint對象將包含客戶端連接的地址和端口。

+0

嘿,就這麼簡單。謝謝 – magnattic 2011-05-11 13:55:55

5
private void ListenForPing() 
{ 
    while (!closeEverything) 
    { 

     IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0); 
     byte[] recData = udp.Receive(ref anyIP); 
     string ping = Encoding.ASCII.GetString(recData); 
     if (ping == "ping") 
     { 
      Console.WriteLine("Ping received."); 
      Console.WriteLine("Ping was sent from " + anyIP.Address.ToString() + 
          " on their port number " + anyIP.Port.ToString()); 
      InvokePingReceiveEvent(); 
     } 
    } 
} 

http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.receive.aspx