Получить IP-адрес клиента из пакетов UDP, полученных с помощью UdpClient - PullRequest
5 голосов
/ 11 мая 2011

Я разрабатываю многопользовательскую игру с помощью класса System.Net.Sockets.UdpClient .

Это для двух игроков, поэтому нужно открыть сервер и ждатьвходящие соединения.Другой игрок вводит IP-адрес хоста и пытается отправить «пинг», чтобы убедиться, что соединение возможно и существует открытый сервер.Затем хост отвечает «pong».

Как только игра запущена, оба должны отправлять друг другу сообщения udp, поэтому им обоим нужен IP-адрес оппонента.

Конечно,Сервер также может вводить IP-адреса клиентов, но это мне кажется ненужным.

Как я могу получить IP-адрес клиентов из пакета udp при получении сообщения "ping"?

Вот мойполучение кода (сервер ожидает пинг):

    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();
             }
        }
    }

Ответы [ 2 ]

14 голосов
/ 11 мая 2011

В вашем примере, когда клиент подключается, объект anyIP IPEndPoint будет содержать адрес и порт клиентского подключения.

5 голосов
/ 11 мая 2011
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

...