博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《在C#中实现Socket端口复用》 以及《 UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断。》问题...
阅读量:5058 次
发布时间:2019-06-12

本文共 1190 字,大约阅读时间需要 3 分钟。

  1.问题:在Socket通信中,我们经常要多客户端共用一个端口,但这往往会报错,因为正常来说一个端口只能绑定一次,但释放的时候比较麻烦,所以还是要是实现端口共用的话,就不用执行一个关一个再开一个。

  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)); } }

差不多吧

转载于:https://www.cnblogs.com/graypigeon/archive/2012/02/18/2357176.html

你可能感兴趣的文章
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
ios封装静态库技巧两则
查看>>
Educational Codeforces Round 46 (Rated for Div. 2)
查看>>
Abstract Factory Pattern
查看>>
C# 实现Bresenham算法(vs2010)
查看>>
基于iSCSI的SQL Server 2012群集测试(一)--SQL群集安装
查看>>
list 容器 排序函数.xml
查看>>
存储开头结尾使用begin tran,rollback tran作用?
查看>>
Activity启动过程中获取组件宽高的五种方式
查看>>
java导出Excel表格简单的方法
查看>>
SQLite数据库简介
查看>>
利用堆实现堆排序&优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>