2

我有非常简单的 TcpListener + TcpClient 静默服务器应用程序。我接受异步传入连接。然后我从网络流中读取数据。

我在新线程中运行此代码。但我必须为每个客户运行新线程......

while (true)
    (MyCoreMessage)BinaryFormatter.Deserialize(TcpClient.GetStream())

是否有一些(简单而简单的)异步方法可以从网络流中反序列化对象?不为每个客户创建新线程...

感谢帮助

4

1 回答 1

2

我强烈建议您在数据前面加上长度前缀(例如,作为 network-byte-order 4 个字节),然后读取此长度。然后你知道下一帧会有多少数据,所以使用异步读取缓冲那么多数据(假设大小不是太大)。当您完成数据缓冲(异步),您可以使用 MemoryStream 之类的东西并正常反序列化。

这:

  • 允许适当的取景
  • 允许您全面检查长度
  • 允许您以异步方式进行所有网络访问
  • 仅当您知道您有合理的数据时才允许您使用反序列化器
于 2012-05-03T18:21:12.940 回答