在开发异步Udp程序的过程中,通常在关闭UDP的时候回遇到诸如socket 访问已释放的资源之类的异常,如下简单操作下:

1 Udp的监听
2 this.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3                 this.serverSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
4                 this.serverSocket.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.12"), port));
5                 EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
6                 this.serverSocket.BeginReceiveFrom(this.buff, 0, this.buff.Length, SocketFlags.None, ref remoteEP, new AsyncCallback(this.Receive), remoteEP);

Udp的关闭
if (this.serverSocket != null){this.serverSocket.Close();this.serverSocket = null;}

当在进行关闭的时候,可能就出现错误,这个应该是多线程资源同步到问题,主线程进行了关闭,然而Udp线程也同样在访问socket,socket都释放了,而Udp线程却还在进行,因此产生异常;

解决的方法很简单,在Udp中访问serverSokcet加一个线程锁,再关闭的时候就应该不会产生异常了!

如下:
private void Receive(IAsyncResult ar){IPEndPoint point = new IPEndPoint(IPAddress.Any, 0);EndPoint endPoint = point;try{lock (locker){if (serverSocket != null){int num = this.serverSocket.EndReceiveFrom(ar, ref endPoint);List<byte> recBytes = new List<byte>();for (int i = 0; i < num; i++){recBytes.Add(this.buff[i]);}this.OnDataReceived(new DataReceivedEventArgs(endPoint, recBytes));}}}catch{}finally{lock (locker){if(serverSocket!=null)this.serverSocket.BeginReceiveFrom(this.buff, 0, this.buff.Length, SocketFlags.None, ref endPoint, new AsyncCallback(this.Receive), endPoint);}}}

public void Close(){           lock (locker){if (this.serverSocket != null){this.serverSocket.Close();this.serverSocket = null;}}}

转载于:https://www.cnblogs.com/yeshuimaowei/p/8656821.html

异步Udp监听关闭 出现异常,访问已释放的资源或者其他错误的解决方法相关推荐

  1. IE8浏览器的访问网页显示证书错误的解决方法

    https://blog.csdn.net/m0_74847010/article/details/130413078 我在这篇文章中最后一张图访问网站验证时,显示证书错误. 解决方法:将cer证书更 ...

  2. linux netstat Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

    在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告. Netstat ...

  3. Spring5源码 - 12 Spring事件监听机制_异步事件监听应用及源码解析

    文章目录 Pre 实现原理 应用 配置类 Event事件 事件监听 EventListener 发布事件 publishEvent 源码解析 (反推) Spring默认的事件广播器 SimpleApp ...

  4. oracle数据库监听频道异常,数据库监听不定期出现异常故障处理

    故障现象: 数据库监听不定期出现异常,从应用tnsping数据库,时间花费很长甚至连不上 故障分析处理过程: 从应用主机tnsping如下: racdb1_scenemon$tnsping racdb ...

  5. php ora-12154,ORA-12154 和 TNS-03505 监听错误的解决方法

    ...rong>agent_exe ActiveScripting C: / Program Files /Microsoft SQL Server/MSSQL.1/MSSQL/binn/Sql ...

  6. ORA12154和TNS03505监听错误的解决方法

    原 ORA-12154 和 TNS-03505 监听错误的解决方法https://blog.csdn.net/tianlesoftware/article/details/5716028版权声明: h ...

  7. C# System.ObjectDisposedException:“无法访问已释放的对象。 ObjectDisposed_ObjectName_Name”

    在ToolStripMenuItem打开一个窗口,输入修改信息后,点击确定保存信息或者取消修改后,窗口正常关闭,但是再次打开窗口修改时,抛出异常 System.ObjectDisposedExcept ...

  8. php连接数据库404错误代码,访问编码后的中文URL返回404错误的解决方法,url404_PHP教程...

    访问编码后的中文URL返回404错误的解决方法,url404 昨天做一个项目,其中有一个需求是每一张图片对应一小段文字对图片的说明,普通的做法是新建一个表然后把图片名与说明文字都记录到数据库内.仔细考 ...

  9. VS2005+ACCESS WEB程序出错数据访问权限错误的解决方法

    最近使用VS2005+ACCESS写了一个网站管理系统,上传到服务器上后,在删除数据和新增加数据时总是出错,在本地调试又没有问题.经过检查,原来是服务器的数据库文件没有修改权限,修改数据库文件的访问权 ...

最新文章

  1. sql查询返回xml数据之应用【转载】
  2. 为什么会有jsessionid,这个东东有什么用呢?
  3. 开发源码常用网站参考
  4. java 中数组与list_Java中List与数组相互转换实例分析
  5. Ubuntu 14.10 下运行进程实时监控pidstat命令详解
  6. python 类不实例化方法:@staticmethod或@classmethod
  7. 对Spring框架的理解(转)
  8. Android中文API(134) —— Account
  9. 解决办法:C向Python传递字串数组导致进程崩溃
  10. 【写给初发论文的人】撰写综述性科技论文常见问题
  11. 解决PHP上传文件时大小受限制问题
  12. 老男孩教育100道面试题
  13. 征途手游2新开区服务器维护多久,征途2手游新区开服表 征途2手游新区开服时间详解[图]...
  14. Rails Commands
  15. 转载:ORA-01034和ORA-27101的解决方法,oracle无法打开解决办法
  16. windows VXN(梯子)应用,域名等分流开发笔记
  17. 旗正规则引擎在薪资管理方面的应用
  18. 数字货币一元夺宝系统:赋予平台代币新价值
  19. 得到数组的最后一个数
  20. 【万字详解】SQL 优化引擎内幕

热门文章

  1. mysql中的day(0_MySQL代码执行0-day漏洞 可本地提权
  2. AcWing 848. 有向图的拓扑序列(拓扑排序模板)
  3. jquery修改服务器json,在没有JQuery的情况下将JSON发送到服务器并获取JSON作为回报...
  4. Linux文件导出到Windows乱码的问题
  5. 网页另存显示不全_word另存为选项没有PDF格式怎么办?别忘了还有这招!
  6. python︱大规模数据存储与读取、并行计算:Dask库简述
  7. 主题模型︱几款新主题模型——SentenceLDA、CopulaLDA、TWE简析与实现
  8. [HAOI2011]Problem b BZOJ2301 数学
  9. CentOS6.5 安装并配置vsftpd
  10. Hive学习之路 (十九)Hive的数据倾斜