You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# UDP指定IP230.0.0.3和端口7716接收数据报错问题求助

错误原因

你遇到的报错核心问题是:点分十进制格式的IP字符串不能直接转换为long类型,IPEndPoint接收的long类型参数是IP地址的整数序列化形式,不是直接转换字符串得到的结果,你需要用IPAddress.Parse()方法解析IP字符串。

实现方案

你的需求是仅接收来自230.0.0.3、端口7716的UDP数据,实现逻辑如下:

  1. 正确初始化UdpClient,绑定到指定端口监听数据
  2. 如果230.0.0.3是组播地址,需要先加入对应组播组才能接收组播数据
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:24:03