C# UDP指定IP230.0.0.3和端口7716接收数据报错问题求助
错误原因
你遇到的报错核心问题是:点分十进制格式的IP字符串不能直接转换为long类型,IPEndPoint接收的long类型参数是IP地址的整数序列化形式,不是直接转换字符串得到的结果,你需要用IPAddress.Parse()方法解析IP字符串。
实现方案
你的需求是仅接收来自230.0.0.3、端口7716的UDP数据,实现逻辑如下:
- 正确初始化UdpClient,绑定到指定端口监听数据
- 如果230.0.0.3是组播地址,需要先加入对应组播组才能接收组播数据
- 接收数据时校验发送端的IP和端口,符合要求的才进行后续处理
正确实现代码示例:
using System.Net; using System.Net.Sockets; using System.Text; static void Main(string[] args) { int listenPort = 7716; string allowedSourceIp = "230.0.0.3"; int allowedSourcePort = 7716; // 绑定本地7716端口监听UDP数据 UdpClient udpClient = new UdpClient(listenPort); // 若230.0.0.3为组播地址,必须加入对应组播组才能接收组播包,非组播场景可注释此行 udpClient.JoinMulticastGroup(IPAddress.Parse(allowedSourceIp)); // 用于存储发送方的IP和端口信息 IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); // 启动异步接收任务 Task.Run(() => { while (true) { byte[] recvBuffer = udpClient.Receive(ref remoteEndPoint); // 过滤来源IP和端口,只有匹配的才处理 if (remoteEndPoint.Address.ToString() == allowedSourceIp && remoteEndPoint.Port == allowedSourcePort) { Console.WriteLine(Encoding.UTF8.GetString(recvBuffer)); } } }); Console.ReadLine(); // 程序退出前释放资源 udpClient.Close(); }
注意事项
- 230.0.0.0/8段属于D类组播地址,如果传输的是组播数据包,必须调用
JoinMulticastGroup加入对应组播组才能正常接收 - UDP是无连接协议,系统层无法直接过滤来源,必须在应用层接收数据后判断来源信息再决定是否处理
- 注意监听端口不要被其他程序占用,否则绑定步骤会抛出异常
内容的提问来源于stack exchange,提问作者ashok
相关产品推荐
相关产品推荐

