首页 新闻 会员 周边

关于C# Socket的连接和设置超时问题。

1
悬赏园豆:50 [已解决问题] 解决于 2014-04-09 11:05
跟踪器系统
客户比如说车上带了个可以发出一段字符串的硬件。
我们这电脑上有个用于接收客户的软件。
两者之间用TCP协议通信.. 
当有个客户发出信号的时候,就有个Scoket建立连接。
如果是客户端的硬件主动断开连接或接收程序主动断开连接,那么我就可以释放Scoket资源。
由于客户端硬件有张SIM卡是通过移动网(第三方)向接收程序发字符串的,移动有时会把两者的建立给断开,而接收程序并不知道.这样如何解决,当第三方断开连接时,我的接收程序如何释放Scoket资源? 目前被断开的一直还在等待接收字符串,其实接收程序已经又重新建立一个连接了。 求高手解决啊.....
服务器是不是可以设置一个连接超时啊? 比如说:当前的连接(其实已经有另一个新的连接,旧的因第三方的原因没能关闭)客户端软件不发送字符串了,服务器等待5分钟接收不到数据,就主动关闭连接.. 如何做啊?
迷失的背影的主页 迷失的背影 | 初学一级 | 园豆:97
提问于:2010-08-31 12:11
< >
分享
最佳答案
0

TCP server 端如果发现链接已经断开, Read 时会返回长度为0,你判读返回长度为0,就释放 server 端资源。

收获园豆:25
eaglet | 专家六级 |园豆:17139 | 2010-08-31 12:17
客户端并不是一直在发送字符串的,而是每隔3分钟发一次,假如超过4分钟还收不到的话,服务器怎么主动断开连接?
迷失的背影 | 园豆:97 (初学一级) | 2010-08-31 13:11
如果你是 TCP 连接,而不是 UDP ,那么这个链路会一直保持的,不管你发不发送数据到服务器。
eaglet | 园豆:17139 (专家六级) | 2010-08-31 14:37
其他回答(2)
0

TcpClient 和 Socket 都有个 ReceiveTimeout 属性.

收获园豆:25
Launcher | 园豆:45045 (高人七级) | 2010-08-31 14:17
0

C#游戏服务器MMRPG交流群:136485198

血海枫 | 园豆:226 (菜鸟二级) | 2012-05-28 11:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册