c# - 如何将流写入内存流?

标签 c# .net

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/

相关文章:

.net - 如何获取非当前线程的堆栈跟踪?

c# - 计算 DateTimes 集合之间的平均 TimeSpan

c# - 使用类型约束实现泛型类时出错

c# - XmlSerializer - 序列化具有 URI 属性的对象时出错

.net - 生成 .NET 中多个列的所有可能组合

.net - 使用 SpecFlow、White、Spring 和 MS Test 测试 WinForms/CompositeUI GUI

c# - 如何在Windows应用商店应用程序关闭时保存数据?

c# - 使用 ObservableCollection 实现模态

c# - 我应该在 linq 搜索中使用字典还是列表?

c# - 统一构建错误 : The name 'EditorUtility' does not exist in the current context