从使用 UdpClient 接收的 UDP 包中获取客户端 IP
Posted
技术标签:
【中文标题】从使用 UdpClient 接收的 UDP 包中获取客户端 IP【英文标题】:Get client IP from UDP packages received with UdpClient 【发布时间】:2011-08-23 07:38:42 【问题描述】:我正在System.Net.Sockets.UdpClient 类的帮助下开发一款动作多人游戏。
这是两个玩家,所以一个人应该打开一个服务器并等待传入的连接。另一个玩家输入主机 IP 并尝试发送“ping”,以确保连接是可能的并且有一个开放的服务器。然后主机以“pong”响应。
游戏运行后,双方都要互相发送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();
【问题讨论】:
【参考方案1】:在您的示例中,当客户端连接时,anyIP IPEndPoint 对象将包含客户端连接的地址和端口。
【讨论】:
【参考方案2】: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
【讨论】:
以上是关于从使用 UdpClient 接收的 UDP 包中获取客户端 IP的主要内容,如果未能解决你的问题,请参考以下文章