C# tcp客户端的socket接收问题
阻塞的tcp连接的客户端SOCKet,建立连接后,与server通信,有时候是指令通信,即问即答;
有时是数据通信,发送出收数据指令后,要收N包数据,
有时是发送指令后,收到一个准备好的指令就发送一包数据,循环N次
有一项指令command_1启动后,开启监听异常,停止command_1指令下发后,要中止监听异常的,还要等待不定长时间来收停止的回应。
对于正在等待接收状态的socket,我强制中止线程之后,socket并没有退出等收的状态,于是下次指令发送不成功,甚至线程根本没有被中止,,,,
怎么强制退出一个等待中的socket??
我不能做接收有timeout的吧?很多时候,等的时间不定,
想终止等收的也不能先发一个废数,因为我每次的接收都判断帧正确与否,再说废数也会存在buff里,影响我下次的数据收发和判断的吧。
困惑,,求解 --------------------编程问答-------------------- 界面很多时候都需要中止正在接收或者等待接收的线程,经常要中止线程,就得中止等待接收的socket,,,正在接收的可以正常中止 ,,,正在等待接收的,中止总是出问题, --------------------编程问答-------------------- 百度一下:"C# Socket通信 阻塞性线程的快速终止"
看起来很美,没测 --------------------编程问答-------------------- while加个判断信息 break退出 --------------------编程问答-------------------- 调用Socket.Close(),阻塞中的Accept/Receive方法就会抛出异常,捕获这个异常不做任何处理,退出 --------------------编程问答--------------------
用这个。
你程序退出时,就把这个socket给close --------------------编程问答-------------------- 程序退出时,这确实是个好方法,不过,我的中止线程只是中止了在收或者在发的某个状态,中止之后,紧跟还有指令通信,这就得重新连接SOCKET, --------------------编程问答-------------------- 目前我就是用这种方法,好使 --------------------编程问答--------------------
做了实验也不成功。作为菜鸟,我没太明白,里面的机制,接收端或者说客户端,在要中止阻塞等收的socket时,先发数据,发数据的socket是新建的,可他跟接收线程socket连得一样,都是server啊,东西它发到server那边去了呀,阻塞的接收端还是收不到东西,依然在等收,无法abort --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 不知道你这个是什么东东。写过伪代码说明一下。
如果是短链接,那么客户端直接结束就行了,无需做什么。因为下一次连接服务器,操作系统自然就会选择另外一个本地端口(端口有时候要几分钟后才能易做图作系统真正释放。只要你使用随机端口,一点也不影响通讯)
如果是长连接,有什么“退出等待接收状态”的必要?整个进程仅需要维持一个tcp客户端连接就行了,谈不上需要退出(当然,如果检测到断开了,需要还使用它进行重连)。
补充:.NET技术 , C#