如何将流写入内存流?

public void doprocess(TcpClient client) { MemoryStream ms = new MemoryStream(); Stream clStream = client.GetStream(); byte[] buffer_1 = new byte[8192]; int count = clStream.Read(buffer_1, 0, buffer_1.Length); while (count > 0) { ms.Write(buffer_1, 0, count); //the below line doesn't gives response and code hangs here count = clStream.Read(buffer_1, 0, buffer_1.Length); } } 

有没有其他方法可以将一个流写入另一个流? 我想两次使用这个Stream ,这就是我需要将它写入MemoryStream

在.NET 4中,复制部分非常简单:

 MemoryStream ms = new MemoryStream(); client.GetStream().CopyTo(ms); 

如果您不使用.NET 4,那么类似于您已经获得的代码基本上是相同的。

请注意,此(以及任何其他尝试)仅在网络流已关闭时才起作用 – 否则Read调用将阻止等待更多数据。 我怀疑你的问题是什么 – 这是一个根本问题。

如果您的网络流没有关闭,那么目前还不清楚您真正希望它如何表现 – 如果“拆分”流的两个读者基本上读取任何缓冲数据,但是然后阻塞直到有新数据? 当然,当从两个流中读取缓冲数据时,可以删除缓冲数据。 如果这就是你所追求的,我不认为.NET中有任何东西可以帮助你 – 而且它可能非常棘手。

如果你可以给我们更多关于你想要做的事情(以及TcpClient连接到什么)的背景,那将真正有所帮助。

您的代码挂起clStream.Read的原因是因为您要从套接字读取8192个字节,但另一方面没有人写入那么多字节。 所以客户端只是坐在那里等待另一方发送所需的字节数。 根据您尝试通过TCP实现的协议,服务器必须有一些消息,它打算发送多少数据,以便客户端事先知道并且只尝试读取那么多字节。

例如,在HTTP协议中,服务器在标头中发送Content-Length标头,以向客户端指示将在主体中发送多少数据。