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 正在连接的内容)的上下文,那将非常有帮助。
关于c# - 如何将流写入内存流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7529642/