c# NetworkStream write() and read()

本文关键字:read and NetworkStream write | 更新日期: 2023-09-27 18:03:54

我想知道如何阻止Networkstream.Read()阻塞线程。我有单独的线程,其中NetworkStream.Read()正在等待来自服务器的数据。假设用户按下某个按钮向服务器发送一些数据。但是我不能调用NetworkStream.Write(),而有NetworkStream.Read()在其他线程等待数据。我可以每次锁定NetworkStream,但NetworkStream.Read()会阻塞线程,所以我不能发送数据,直到读取至少1个字节。

c# NetworkStream write() and read()

您可以同时发布readwrite,如MSDN文档中所述

读写操作可以在NetworkStream类的一个实例上同时执行,而不需要同步。只要有一个唯一的线程执行写操作和一个唯一的线程执行读操作,读和写线程之间就不会交叉干扰,也不需要同步。

您需要使用如下所述的非阻塞读取操作:http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.beginread.aspx

您可以查询NetworkStream。在某些时间段内设置DataAvailable属性,只有当它为真时才读取。"如果DataAvailable为true,则立即返回对Read的调用。"这样你就不会阻塞流了

NetworkStream类提供了在阻塞模式下通过流套接字发送和接收数据的方法。有关阻塞套接字与非阻塞套接字的更多信息,请参见使用异步客户端套接字