如何控制C#Socket的mongodb 连接超时时间间

tcp Socket的超时时间默认20多秒,而实际连上不需1秒时间,20多秒是无法接受的。
IPEndPoint ipep = new IPEndPoint(ip, port);//IP和端口
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ConnectSocketDelegate connect = ConnectS
IAsyncResult asyncResult = connect.BeginInvoke(ipep, sock, null, null);
bool connectSuccess = asyncResult.AsyncWaitHandle.WaitOne(TimeOut, false);
if (!connectSuccess)
MessageBox.Show(string.Format("失败!错误信息:{0}", "连接超时"));
return false;
string exmessage = connect.EndInvoke(asyncResult);
if (!string.IsNullOrEmpty(exmessage))
MessageBox.Show(string.Format("失败!错误信息:{0}", exmessage));
return false;
sock.Send(data);//发送信息
reslen = sock.Receive(response, SocketFlags.None);//接收应答数据包
private delegate string ConnectSocketDelegate(IPEndPoint ipep, Socket sock);
private string ConnectSocket(IPEndPoint ipep, Socket sock)
string exmessage = "";
sock.Connect(ipep);
catch (System.Exception ex)
exmessage = ex.M
阅读(...) 评论()
jhlong @ cnblogs
版权所有(C)
转载请注明链接.对你有用请推荐一下 代码全部经过本人测试,但不保证复制粘贴就正常运行,请结合前后代码及描述理解后修改和使用c#socket保持长连接_c#吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:109,529贴子:
c#socket保持长连接收藏
最近打算弄个远程控制玩玩,于是写了个socket程序,服务器端的。主要就是监听端口,然后对收到的数据进行处理。网络呢,我是用nat123映射出去的,外网(如我的手机、连上已联网wifi的设备)是通过连接nat123的外网来实现与服务器的数据交互。初始还算正常,但是。过段时间不连接,socket连接断开,服务器端就不能找到设备了(socket自动连接关闭)。。。。。我现在是想让设备一直保持和服务器的tcp连接,就像QQ啊,还有物联网的一些设备那样,,,服务器端可以随时控制已注册的设备(设备过来的数据有指明是要注册还是已注册过)。。。我查了一些资料,说现在一般是用心跳包保持连接,,,,,现在想问问吧里的大神:1:socket长时间保持怎么做?越长越好,最好还是知道连接是否正常
2:socket的大容量怎么做?比如100-1000个tcp连接,实现1中的长时间连接,有没有什么方案。3:如果无法做到长时间保持tcp连接(不用心跳包),那tcp连接最长可以做到多久?要怎么编程?,,,,,,,谢谢各位大牛
c#O基础学习中心「需高中以上」c#,达内总监授课,免费试学!达内IT培训,专设c#学习课程,「入门+精通」,一步全搞定!学习+就业!
楼主可否发一份与我,我也学习一下
1.10s左右就应该发送一个心跳包。2.这是硬指标。没有什么办法。3.理论上会一直连着。除非被SYN防火墙斩断了。你可以在防火墙的安全策略里看到能维持多长时间。
求一份源码学习一下socket编程
现在普遍就是心跳包来长连接
求源码,谢谢
QQ不是tcp 是udp 宝贝
可以不用心跳
有方法可以立即检测到下线
登录百度帐号推荐应用最近在Socket编程的时候发现只能设置Send和Recieve的Timeout时间,而Connect方法的Timeout是固定的,大概有30-40s,如果用同步方法界面会卡死很长时间
下面介绍两种通过异步的方式解决此问题的方法:
1.使用BeginConnect方法
IAsyncResult connResult = mySocket.BeginConnect(yourAddress, yourPort, null, null);
connResult.AsyncWaitHandle.WaitOne(2000, true); &//等待2秒
if (!connResult.IsCompleted)
  mySocket.Close();
  //处理连接不成功的动作
}else{  //处理连接成功的动作
这种方法很好的控制了连接超时时间而且代码非常简单,但是界面仍然会有2秒的卡死产生。如果想解决该问题,则需要创建一个额外的线程来执行WaitOne方法。
2.使用ConnectAsync方法
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
<pleted += new EventHandler&SocketAsyncEventArgs&(AsyncConnected);
e.RemoteEndPoint = new IPEndPoint(IPAddress.Parse(yourAddress), yourPort);
mySocket.ConnectAsync(e);
这是一种事件触发的方式,将连接成功后的动作放在Completed事件的处理过程中,从而使界面不会卡死。同时也可以创建一个额外线程来监视连接时间,从而达到控制连接超时的目的。
阅读(...) 评论()

我要回帖

更多关于 数据库连接池超时时间 的文章

 

随机推荐