C# Socket无法接收组播消息问题求助
C# Socket无法接收组播消息问题求助
大家好,我碰到一个特别费解的问题,想请各位大佬帮忙分析下。我写了一段C#脚本,功能是向组播地址发送查询请求,然后监听指定端口接收设备的回复。这段脚本在我自己的私人笔记本上运行完全正常,但换到工作笔记本上就彻底失效了——根本收不到任何设备的回复。
先跟大家说下背景:这个脚本是用来查找局域网内特定设备的,设备厂商官方的查找工具在我的工作笔记本上能正常搜到设备、收到回复,可我的脚本就是不行,我实在搞不懂哪里出了问题。
我已经做了这些排查:
- 检查了系统的IP规则,目标端口(5353)的入站规则是存在的,为了保险起见我还手动新增了一条允许规则;
- 用Wireshark抓包能明确看到设备已经对我的查询做出了回复,我的工作本IP是192.168.0.2,回复的设备IP是192.168.0.3,用的是mDNS协议。
下面是我的脚本代码:
IPAddress ip = IPAddress.Parse("224.0.0.251"); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, IPAddress.Any));// Add socket to the multicast group IPEndPoint listener = new IPEndPoint(IPAddress.Parse(localIP), 5353); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint senderRemote = (EndPoint)sender; socket.Bind(listener); Console.WriteLine("server started listening\n"); // Receive messages while (_running) { byte[] data = new byte[3024]; socket.ReceiveFrom(data, ref senderRemote); string str = System.Text.Encoding.ASCII.GetString(data); // Console.WriteLine(str); cameraIP = senderRemote.ToString(); Console.WriteLine(cameraIP); // Console.WriteLine(senderRemote.ToString()); }
Wireshark里能清楚看到设备发过来的消息,但我的脚本就是接收不到,实在不知道哪里出问题了,有没有大佬能给点思路?
备注:内容来源于stack exchange,提问作者bakeljouw
相关产品推荐
相关产品推荐

