如何获取组播 UDP 数据包发送者的 IP?当前代码以同步/阻塞方式设置(参见下面的注释)。这是代码:
private void receive()
{
string mcastGroup = SetMcastGroup();
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.EnableBroadcast = true;
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000);
s.Bind(ipep);
IPAddress ip = IPAddress.Parse(mcastGroup);
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, IPAddress.Any));
while (true)
{
try
{
byte[] b = new byte[4096];
s.Receive(b);
string str = Encoding.ASCII.GetString(b, 0, b.Length);
//this.SetText(ipep.Address + ": " + str.Trim());
this.SetText(senderIP() + ": " + str.Trim());
}
catch{}
}
}
Note:这个问题来自聊天,因此不是我的代码。我只是因为了解这个问题才问。
由于您使用的是 UDP,因此您不会与远程端点建立连接(与 TCP 不同,每个连接只有一个套接字)。因此,当您接收数据报时,您必须获取远程端点的地址。执行此调用receiveFrom
代替receive()
http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receivefrom.aspx http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receivefrom.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)