原文地址:http://www.cnblogs.com/pasoraku/p/5612105.html

故事是这样的。

前几天在网上逛,看到了一个漂亮的坦克模型。

我觉得这个坦克可以做一个游戏,那需要一些服务器代码。

因为是实时对战的,听说TCP有很多不适,选择了UDP。

得知有一种算法可以解决UDP丢包乱序的问题,就封装成了C#,雄赳赳气昂昂准备大搞一番。

然而和客户端一对接,Client发了几个包关闭,天,这就抛了个异常!

10054...远程主机强迫关闭了一个现有的连接

喂喂,不是说好的UDP是无连接的吗?为嘛说连接被强迫关闭了??

不过没关系,不就是10054吗,TCP Socket时候又不是没见过,try catch一下就好了。

那么,try catch(ex){log(ex);} finally{beginReceive();}三步走。

晕!beginReceive()挂了...这都会挂?再加try catch捕获了递归,递归到成功为止!然而怎么救也救不回来/(ㄒoㄒ)/~~

仔细检查一下,发现是对关闭的客户端EndPoint执行了Send,导致Receive那边抛出了异常Σ( ° △ °|||)︴

为嘛是执行Send导致Receive抛出异常,而且导致next Receive救也救不回来?

那么?不Send能救吗?能...可是问题是当Receive异常的时候不知道是哪个客户端断开了呀,如果是Send时候异常还好,跑Receive异常,而且异常时候的EndPoint也是对不上的,关联不上啊(这时候倒是想起无连接了←_←)。

于是请教了谷歌老师。

果然搜出一大堆结果,在筛选掉大量的TCP10054和没有结果没有意义的问答贴和大量转载之后,终于找到了个靠谱的答案,不幸的是文章也是机器人爬来的转载各种广告不忍直视,好在贴出了一个链接:

https://support.microsoft.com/zh-cn/kb/263823

看这个排版,想来也是年代已久,大概意思是windows的一个bug,可以通过加几行代码的方式搞定。

于是加了几行代码:

const uint IOC_IN = 0x80000000;
int IOC_VENDOR = 0x18000000;
int SIO_UDP_CONNRESET = (int)(IOC_IN | IOC_VENDOR | 12);

//因为我使用的是UdpClient, 所以先get出Socket(Client)来。
server.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);

再次执行,OK,说好的无连接UDP回来了!

问题解决。

Linux下无此问题,所以不需要添加上述代码,(添加反而异常)。

鉴于网上答案诸多不靠谱,立此贴增加点命中率。

Windows下的UDP爆了10054--远程主机强迫关闭了一个现有的连接的更多相关文章

  1. 【问题解决方案】Keras手写数字识别-ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接

    参考:台大李宏毅老师视频课程-Keras-Demo 在载入数据阶段报错: ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接 Google之 ...

  2. selenium webdriver报错 ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

    昨天跑的好好的代码,今天突然报错: ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接. 调查一下,原来是Chrome自动升级,而chrom ...

  3. 关于[WinError 10054] 远程主机强迫关闭了一个现有的连接。

    之前一直用python实现qq邮箱自动发送,都弄的好好的,然后今天一打开,就出现如题的错误,百度了许多,说,可能发送邮件次数过多,被当作是攻击,建议换个邮箱,换了也不行, 最后用手机给电脑分享Wifi ...

  4. python 爬虫过程中出现:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接

    参考: https://blog.csdn.net/illegalname/article/details/77164521

  5. [转] python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054

    python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...

  6. Unexpected EOF 远程主机强迫关闭了一个现有的连接 如何处理

    由于数据量的增大,调用接口的次数会增加. 当连续向目标网站发送多次request后,目标网站可能会认为是,恶意攻击. 于是会抛出requests异常. 测试代码: for i in range(200 ...

  7. Adb connection Error:远程主机强迫关闭了一个现有的连接 解决方法

    用真机调试程序的时候,eclipse 的 Console 总是出现如下的错误"Adb connection Error:远程主机强迫关闭了一个现有的连接". 问题出现的原因:这是 ...

  8. android:Adb connection Error:远程主机强迫关闭了一个现有的连接

    用真机调试程序的时候,eclipse的console总是出现如下的错误“Adb connection Error:远程主机强迫关闭了一个现有的连接” 问题出现的原因:这是ddms调用adb引发的. 经 ...

  9. Android真机调试——远程主机强迫关闭了一个现有的连接。

    以前用真机调试程序的时候,Android Studio 出现如下的错误 [2016-11-12 10:37:36 - DeviceMonitor] Adb connection Error:远程主机强 ...

  10. 解决:Adb connection Error:远程主机强迫关闭了一个现有的连接

    最近刚入手了一台G12,用它来调试程序的时候,eclipse的console总是出现如下的错误“Adb connection Error:远程主机强迫关闭了一个现有的连接” 问题出现的原因:这是ddm ...

随机推荐

  1. 激活PHPStorm 2016.3

    通过互联网激活PHPStorm 2016.3: http://jetbrains.tencent.click http://172.245.22.235:1017 http://idea.imsxm. ...

  2. Centos安装lnmp环境

    1:查看环境: [root@10-4-14-168 html]# cat /etc/redhat-release CentOS release 6.5 (Final) 2:关掉防火墙 [root@10 ...

  3. uml的四种关系

    UML的四种常用关系: 泛化关系.关联关系.实现关系.依赖关系 其中泛化关系是指父类与子类之间的继承关系: 实现关系是指接口与实现类之间的关系: 依赖关系和关联关系的区别如下: 只要存在对象间的交互, ...

  4. EditPlus远程编辑、语法高亮、编译运行源代码设置

    最近写代码的过程中,除了写Java时用的Eclipse.在Linux下编辑的Vi之外,有时也会用EditPlus打开一些文件,如配置文件.日志文件.脚本等.个人觉得EditPlus在很多场景下比较好用 ...

  5. javascript 中的继承实现, call,apply,prototype,构造函数

    javascript中继承可以通过call.apply.protoperty实现 1.call call的含义: foo.call(thisObject, args...) 表示函数foo调用的时候, ...

  6. 【活动】监控宝惹火Docker监控,开放试用中

    要说这两年最火爆的技术有哪些,Docker绝对是其中之一. 有人说,Docker缺少必要的运维监控工具,实践起来有难度. 幸福来的太快了. 云智慧旗下产品监控宝又惹火了,推出重量级新功能——Docke ...

  7. 【NoSql】MongoDb

    [NoSql]MongoDb 一. 文档 1. 官网 2. C# Driver 3. C# 开发文档 二. 命令 1. --config "C:\mongodb\mongod.cfg&quo ...

  8. Sass开发环境搭建

    一.Ruby环境下Sass的安装      a.安装Ruby           1.下载rubyinstaller安装           2.命令行或者直接使用sass gem包安装Sass.   ...

  9. 直接用<img> 的src属性显示base64转码后的字符串成图片

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="base64转码后的字符串" ></img> 下面的图片 ...

  10. modelsim仿真xilinx mig ip core相关问题

    1.运用自动化脚本文件 do sim.do  其中不支持 .f文件 , 需要直接vlog 2.对于mig模型采用下面句型(根据example中do sim.do文件) vlog -sv +define ...