日期:2014-05-17  浏览次数:21128 次

C# tcp客户端的socket接收问题
阻塞的tcp连接的客户端SOCKet,建立连接后,与server通信,
有时候是指令通信,即问即答;
有时是数据通信,发送出收数据指令后,要收N包数据, 
有时是发送指令后,收到一个准备好的指令就发送一包数据,循环N次
有一项指令command_1启动后,开启监听异常,停止command_1指令下发后,要中止监听异常的,还要等待不定长时间来收停止的回应。
对于正在等待接收状态的socket,我强制中止线程之后,socket并没有退出等收的状态,于是下次指令发送不成功,甚至线程根本没有被中止,,,,
怎么强制退出一个等待中的socket??
我不能做接收有timeout的吧?很多时候,等的时间不定,
想终止等收的也不能先发一个废数,因为我每次的接收都判断帧正确与否,再说废数也会存在buff里,影响我下次的数据收发和判断的吧。
困惑,,求解

------解决方案--------------------
百度一下:"C# Socket通信 阻塞性线程的快速终止"
看起来很美,没测
------解决方案--------------------
while加个判断信息  break退出
------解决方案--------------------
调用Socket.Close(),阻塞中的Accept/Receive方法就会抛出异常,捕获这个异常不做任何处理,退出
------解决方案--------------------
引用:
调用Socket.Close(),阻塞中的Accept/Receive方法就会抛出异常,捕获这个异常不做任何处理,退出


用这个。
你程序退出时,就把这个socket给close
------解决方案--------------------
不知道你这个是什么东东。写过伪代码说明一下。

如果是短链接,那么客户端直接结束就行了,无需做什么。因为下一次连接服务器,操作系统自然就会选择另外一个本地端口(端口有时候要几分钟后才能被操作系统真正释放。只要你使用随机端口,一点也不影响通讯)

如果是长连接,有什么“退出等待接收状态”的必要?整个进程仅需要维持一个tcp客户端连接就行了,谈不上需要退出(当然,如果检测到断开了,需要还使用它进行重连)。