《在C#中实现Socket端口复用》 以及《 UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断。》
2012-09-11 17:16
561 查看
1.问题:在Socket通信中,我们经常要多客户端共用一个端口,但这往往会报错,因为正常来说一个端口只能绑定一次,但释放的时候比较麻烦,所以还是要是实现端口共用的话,就不用执行一个关一个再开一个。
2.实现端口复用:
正常绑定:
添加共用函数:SetSocketOption
这样就不会报占用同一端口的错了
对于中断问题:原因大概是因为你关闭socket时,socket.Receive(buffer); 仍出于读取状态。
改为:
2.实现端口复用:
正常绑定:
//定义网络地址,连接类型与网络协议并绑定本地IP与端口 socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); ipPoint = new IPEndPoint(IPAddress.Parse(ipAdrr), 2012); socket.Bind(ipPoint);
添加共用函数:SetSocketOption
//定义网络地址,连接类型与网络协议并绑定本地IP与端口 socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); ipPoint = new IPEndPoint(IPAddress.Parse(ipAdrr), 2012); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); //SocketOptionName.ReuseAddress是关键
socket.Bind(ipPoint);
这样就不会报占用同一端口的错了
对于中断问题:原因大概是因为你关闭socket时,socket.Receive(buffer); 仍出于读取状态。
改为:
if (socket.Poll(-1,SelectMode.SelectRead)) { if ( ( dataLength = socket.Receive(buffer) ) > 0) { Analyer(Encoding.ASCII.GetString(buffer, 0, dataLength)); } }
相关文章推荐
- 《在C#中实现Socket端口复用》 以及《 UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断。》问题
- 《在C#中实现Socket端口复用》 以及《 UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断。》问题
- UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断
- 一个封锁操作被对WSACancelBlockingCall的调用中断(在线)
- [分享]一个封锁操作被对 WSACancelBlockingCall 的调用中断 ErrorCode=10004
- 一个封锁操作被对 WSACancelBlockingCall 的调用中断 ErrorCode=10004
- WSAGetLastError:10004 一个封锁操作被对 WSACancelBlockingCall的调用中断 的解决
- ”一个封锁操作被对 WSACancelBlockingCall 的调用中断“。解决办法
- ”一个封锁操作被对 WSACancelBlockingCall 的调用中断“。解决办法
- Error: 10004 一个封锁操作被对 WSACancelBlockingCall的调用中断 的解决
- 一个封锁操作被对WSACancelBlockingCall的调用中断
- 一个封锁操作被对 WSACancelBlockingCall 的调用中断 ErrorCode=10004
- 一个封锁操作被对 WSACancelBlockingCall 的调用中断
- 一个封锁操作被对 WSACancelBlockingCall 的调用中断
- 一个封锁操作被对 WSACancelBlockingCall 的调用中断 ErrorCode=10004
- [Socket网络编程]一个封锁操作被对 WSACancelBlockingCall 的调用中断。
- How to cancel an asynchronous call? 异步调用 的中断 取消 c#
- [COM Interop学习小结]实现一个C#调用C++的示例
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- 在c#中怎么调用ExitWindowsEx函数实现XP的关机、注销、重启操作?