C# Socket连接超时设置
问题描述:
对于C# Socket没有超时设置的选项,默认情况下进行Socket连接,返回连接失败需要20-30s时间,严重影响用户体验
问题解决:
Socket服务器端:


Socket客户端:



IAsyncResult.AsyncState 返回一个对象,该对象时启动异步操作的方法的最后一个参数

注:
在Socket客户端进行超时连接的设置,异步连接,设置连接处理的回调函数,以及超时的处理。
ManualResetEvent的WaitOne(TimeSpan, Boolean)起到了主要的作用。它将阻止当前线程,直到ManualResetEvent对象被Set或者超过timeout时间。上面的代码中,调用BeginConnect后通过WaitOne方法阻止当前线程,如果在timeoutMSec时间内连接成功,将在CallBackMethod回调中调用TimeoutObject.Set,解除被阻塞的连接线程并返回;否则,连接线程会在等待超时后,主动关闭连接并抛出TimeoutException。
参考资料:
http://www.cnblogs.com/weidagang2046/archive/2009/02/07/1385977.html
http://www.codeproject.com/Articles/31514/Implementation-of-Connecting-a-Socket-with-Timeout
http://msdn.microsoft.com/zh-cn/library/system.threading.manualresetevent(v=vs.95).aspx
C# Socket异步通信:
http://www.cnblogs.com/llllll/archive/2009/05/13/1455703.html
http://www.cnblogs.com/sunev/archive/2012/08/07/2625688.html
源程序文件:


C# Socket连接超时设置的更多相关文章
- Socket连接超时(转)
		
Socket.connect连接超时有二种情况: 1.由于网络的问题,TCP/IP三次握手时间>timeout的设置时间.这在国外访问weibo时,并且网络环境极差的情况下有可能发生.解决的办法 ...
 - connect socket的超时设置
		
最近项目中,有个需求是检测某ip地址是否是通的,使用了socket的connect函数.但是,当ip地址写错的话,connect就会一直阻塞在那里,大概2.3分钟才能返回连接失败.这对于用户来说是不可 ...
 - [转]c# winform tcp connect timeout 连接超时设置
		
转自:https://www.cnblogs.com/jhlong/p/5622336.html 简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的 ...
 - httpClient连接超时设置
		
注: 每个HttpClinet对象设置都不一样 这里已3.x和4.x为例说明 1)3.X版本 创建连接 HttpClient httpClient=new DefaultHttpClient(); 这 ...
 - perl Socket接收超时设置
		
一般来说, IO::Socket::INET里的Timeout设置是对于conncet的 如果你想设置recv接收超时, 可以这样设置: usr Socket: ...... , )); #注意这里p ...
 - urllib2连接超时设置
		
#urllib2设置超时 #获取网页的源码 def getHtml(url,i): if i > 2: return try: req = urllib2.Request(url) time.s ...
 - 关于TcpClient,Socket连接超时的几种处理方法
		
用TcpClient做通信的时候,经常发现网络连接不通的时候,代码就卡死在那里,TcpClient竟然没有超时的设定 泪奔啊 看来微软不是把所有工具准备得妥妥当当的啊 没办法 现在用线程来包装一下这个 ...
 - oracle长连接超时设置
		
方法一.在sqlnet.ora中设置参数 如需要设置客户端空闲10分钟即被中断,则在sqlnet.ora的末尾添加SQLNET.EXPIRE_TIME=10注:sqlnet.ora文件的路径在$ORA ...
 - golang网络通信超时设置
		
网络通信中,为了防止长时间无响应的情况,经常会用到网络连接超时.读写超时的设置. 本文结合例子简介golang的连接超时和读写超时设置. 1.超时设置 1.1 连接超时 func DialTimeou ...
 
随机推荐
- 解决PHP中file_get_contents抓取网页中文乱码问题
			
根据网上有朋友介绍说原因可能是服务器开了GZIP压缩. 下面是用firebug查看我的博客的头信息,Gzip是开了的. 请求头信息原始头信息 代码如下 复制代码 Accept text/html,ap ...
 - python常错:  join() 方法
			
描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str.join(sequence) 参数 sequence -- 要连接的 ...
 - (转)[转]大数据时代的 9 大Key-Value存储数据库
			
在过去的十年中,计算世界已经改变.现在不仅在大公司,甚至一些小公司也积累了TB量级的数据.各种规模的组织开始有了处理大数据的需求,而目前关系型数据库在可缩放方面几乎已经达到极限. 一个解决方案是使用键 ...
 - SNRO:Number Range
			
业务对象是在一定的编号范围内分配编号的,编号既可以是内部分配也可以是外部分配.对于外部分配,用户输入编号,系统检查这个编号是否被占用.对于内部分配,系统会自动的把编号分配给业务对象.所以内部分配和外部 ...
 - How to Fix Missing TortoiseSVN File Status Icons in Windows
			
For many Windows-based developers, Subversion and TortoiseSVN is a great source control solution. It ...
 - python 中range与xrange的区别
			
先来看看range与xrange的用法介绍 help(range)Help on built-in function range in module __builtin__: range(...) r ...
 - WInform启动另一个项目传值
			
背景:从A项目中登陆后,跳转到B项目的某个页面(B不再登陆). A项目启动进程: public Form1() { InitializeComponent(); } #region 调用进程 [Dll ...
 - MQTT开发小记(一)
			
最近在协助公司硬件组进行MQTT协议的嵌入式SDK包开发. 简述一下MQTT MQTT简单的来说是一种订阅/发布模式的通信形式,一般分为客户端和服务器端. MQTT服务器端可以简单理解为一个消息中转站 ...
 - margin的BUG
			
在进行简单的div盒子嵌套时,发现设置margin-top时存在bug,然后就去谷歌搜索了一下,发现margin确实存在bug. bug的现象是父子元素嵌套时,如果子元素是块元素时,对块元素设置mar ...
 - mysql 让一个存储过程定时作业的代码
			
1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...