将NetworkStream复制到MemoryStream的时间为∞天

sab*_*ber 3 .net c# streaming network-programming

我有以下代码:

_clientRequestStream = _tcpClient.GetStream();

var memoryStream = new MemoryStream();
_clientRequestStream.CopyTo(memoryStream);
Run Code Online (Sandbox Code Playgroud)

CopyTo需要很长时间才能复制Stream到另一个Stream.似乎应用程序没有任何理由停在那里,或者至少我找不到原因.

Jas*_*aat 12

网络流保持打开状态,直到它被流的一端关闭.CopyTo()从流中复制所有数据,等待流结束.如果服务器没有发送数据,则流不会结束或关闭,而CopyTo()会尽职地等待更多数据或流结束.流的另一端的服务器必须关闭流以使其结束并且CopyTo()返回.

谷歌"TcpClient教程"或"TcpCLient示例",以获得一些好的页面,显示您可能使用它们的其他方式,例如检查NetworkStream.DataAvailable以查看是否有数据等待或者流是否仍然打开而没有数据.要只读取一些数据而不等待流关闭,您将使用NetworkStream.Read()或将其包装在StreamReader中并使用ReadLine().这一切都取决于您连接的服务器以及您要完成的任务.


Ter*_*ver 6

TCP是一种流协议.字节可以以任意速率流动.从理论上讲,你可以获得一个字节,然后几秒钟后得到10个字节,然后几分钟后得到两个字节.

TCP作为协议本身是无用的.

必须有一个更高阶的协议,其结构允许检测"消息"的开头和结尾.我们无法猜测你正在听什么高阶协议,你必须知道为了倾听.