gpt4 book ai didi

c# - TCP 网络流处理

转载 作者:可可西里 更新时间:2023-11-01 02:41:06 24 4
gpt4 key购买 nike

我通过各自的 TCP 套接字异步服务各种 TCP 客户端。目前,我有 3 个任务同时运行:

  1. 使用 await StreamReader.ReadAsync() 等待来自 NetworkStream 的数据
  2. 使用await StreamWriter.WriteAsync()将数据写入NetworkStream
  3. 定期发送看门狗消息

现在,当我这样调用时:

var stream = new NetworkStream(_socket);

// reading task

using (var reader = new StreamReader(stream)) {
// ...read...
}

底层 NetworkStream 在读取完成后最终被销毁,因为 StreamReaderDispose() 上关闭它。

最简单的方法是不关闭 StreamReader,但据我所知,这是一个非常糟糕的主意。那么,如何在保持套接字连接打开的情况下处理异步读写呢?

最佳答案

从 .NET 4.5 开始,如果您查看 StreamReaderStreamWriter 的构造函数重载,就会发现有一个(目前只有一个)构造函数采用 bool leaveOpen 参数。使用此重载并传递 true - 然后它不会感觉到底层流的所有权。

如果这在您的框架版本上不可用,您将必须创建一个 NonClosingStream : Stream,它使用 pass-thru 实现装饰流,除了 Close()Dispose(),它们应该是空操作(好吧,他们可以将 null 分配给表示包装流的字段,但仅此而已)。

关于c# - TCP 网络流处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20262212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com