大家好
问题:
我正在尝试获取多播数据包的源IP,但是我得到的都是0.0.0.0:80。
我尝试过的方法:
我尝试了这些网站上显示的方法,不确定我是否正确实现了,但是所有方法都返回相同的IP地址,即0.0.0.0,此帖子和此帖子。
这两个链接都提到使用socket.recieveFrom()或socket.BeginRecieveMessageFrom()代替socket.recieve()
private void recieveText()
{
//initialise multicast group and bind to interface
Socket _listener_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, _PORT);
_listener_socket.Bind(ipep);
IPAddress localip = IPAddress.Parse("224.5.6.7");
_listener_socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(localip, IPAddress.Any));
//recieve data to multicast group
while (_listener_socket.IsBound)
{
updateLabel("listening...");
byte[] b = new byte[1024];
updateLabel("message recieved");
updateRedBox("\n---------------------------------\n New Message :\n");
EndPoint IPEPoint = (EndPoint)ipep;
_listener_socket.BeginReceiveMessageFrom(b, 0, b.Length, 0, ref IPEPoint, null, null);
updateRedBox(IPEPoint.ToString());
char[] chars = new char[b.Length / sizeof(char)];
System.Buffer.BlockCopy(b, 0, chars, 0, b.Length);
string t = new string(chars).Trim();
updateRedBox(t);
updateRedBox("\n----------------------------------\n");
}
}
BeginReceiveMessageFrom
是一个 异步 操作。当它返回时,并不一定已经完成了任何事情。如果你需要异步,请在访问该值之前等待它完成。否则,切换到同步的ReceiveMessageFrom
。不能保证这会修复你的问题,但是目前代码存在明显的错误。 - Damien_The_Unbeliever