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

C# UDP程序在两台静态IP PC间通信报请求地址无效如何解决

报错原因
  • 绑定IP不属于当前运行主机的有效网卡地址:代码中硬编码接收套接字绑定IP为固定值192.168.2.1,该IP仅为服务器主机的网卡地址。若将代码直接部署到客户端(IP为192.168.2.2)运行,Bind操作尝试绑定本机不存在的IP,就会触发该错误。
  • 发送逻辑冗余导致地址上下文错误:UDP为无连接协议,代码中每次发送数据前调用Connect方法属于冗余操作,多次调用可能导致套接字地址上下文异常,触发同类报错。
解决方案
  1. 适配绑定IP配置
    两种方案二选一即可:
    • 按部署环境修改固定IP:服务器运行时保持udpBindingIp = "192.168.2.1",客户端运行时修改为udpBindingIp = "192.168.2.2"
    • 通用无侵入适配:将udpBindingIp改为IPAddress.Any.ToString(),套接字会自动绑定本机所有可用网卡的对应端口,无需根据部署环境修改代码
  2. 优化UDP发送逻辑
    移除冗余的Connect调用,改用UDP专用的BeginSendTo方法发送数据,修改后的Send方法参考实现:
private static void Send(string text)
{
    try
    {
        byte[] data = Encoding.ASCII.GetBytes(text);
        // 直接指定目标地址发送,无需提前Connect
        socketSender.BeginSendTo(data, 0, data.Length, SocketFlags.None, epTo, (ar) =>
        {
            State so = (State)ar.AsyncState;
            int bytes = socketSender.EndSendTo(ar);
        }, state);
    }
    catch (Exception e)
    {
        Console.WriteLine("发送异常:" + e.Message);
    }
}
  1. 可选补充配置
    为发送套接字显式绑定端口,避免系统随机分配端口被防火墙拦截,在Main方法的socketSender初始化后添加如下代码:
socketSender.Bind(new IPEndPoint(IPAddress.Any, udpBindingPort + 1));

同时确认两台主机的防火墙均已开放27000、27001端口的UDP入站、出站规则。


内容的提问来源于stack exchange,提问作者fillibuster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:36:02