从随 UdpClient 收到的 UDP 包中获取客户端 IP

本文关键字:包中 获取 客户端 IP UDP UdpClient 从随 | 更新日期: 2023-09-27 17:56:12

我正在System.Net.Sockets.UdpClient类的帮助下开发一个动作多人游戏。

它适用于两个玩家,因此一个人应该打开服务器并等待传入连接。另一个玩家输入主机IP并尝试发送"ping",以确保连接是可能的并且有一个开放的服务器。然后,主持人以"乒乓"回应。

一旦游戏运行,双方都必须向对方发送udp消息,因此它们都需要对手的IP地址。

当然,服务器也可以输入客户端IP,但这对我来说似乎是不必要的。

收到"ping"消息时,如何从 udp 包中获取客户端 IP?

这是我的接收代码(服务器等待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();
             }
        }
    }

从随 UdpClient 收到的 UDP 包中获取客户端 IP

在您的示例中,当客户端连接时,anyIP IPEndPoint 对象将包含客户端连接的地址和端口。

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