C# Socket编程实现跨局域网数据收发及地址无效报错解决
报错根因
你收到的The requested address is not valid in its context错误,核心问题出在客户端逻辑错误:Bind方法的作用是将套接字绑定到当前运行客户端的本机的网卡地址和端口,你填写的168.168.0.8是服务端的IP,客户端本地不存在这个IP,绑定操作直接失败。
修复步骤
1. 服务端调整
原服务端默认绑定的是主机名解析出的第一个IP,大概率是回环地址127.0.0.1,仅能本机访问,需要修改为监听所有网卡的请求:
// 替换掉原服务端中获取IP、构造localEndpoint的三行代码 IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Any, 32000);
调整后额外完成两项配置:
- 确认服务端运行的机器本地IP确实是你填写的
168.168.0.8 - 开放服务端防火墙32000端口的TCP入站规则,或临时关闭防火墙测试连通性
2. 客户端调整
删掉不必要的Bind调用,客户端的端口和出站网卡会由系统自动分配,修改后的客户端代码如下:
// 此处为服务端的局域网IP,提前在客户端机器ping该IP确认网络连通 IPAddress serverIp = IPAddress.Parse("168.168.0.8"); IPEndPoint serverEndpoint = new IPEndPoint(serverIp, 32000); Socket client = new Socket(serverIp.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // 完全删除client.Bind(ipEndpoint)这行代码 client.Connect(serverEndpoint);
内容的提问来源于stack exchange,提问作者Shaiwal Tripathi
相关产品推荐
相关产品推荐

