我有非常简单的 TcpListener + TcpClient 静默服务器应用程序。我接受异步传入连接。然后我从网络流中读取数据。
我在新线程中运行此代码。但我必须为每个客户端运行新线程...
while (true)
(MyCoreMessage)BinaryFormatter.Deserialize(TcpClient.GetStream())
是否有一些(简单且简单)异步方法可以从网络流中反序列化对象? 不为每个客户端创建新线程...
感谢帮助
最佳答案
我强烈建议您在数据前面加上长度前缀(例如,网络字节顺序 4 字节),并首先读取该长度。然后您知道下一帧中需要多少数据,因此使用异步读取缓冲那么多数据(假设大小不是太大)。当您完成数据缓冲(异步)后,然后您可以使用 MemoryStream 之类的东西并正常反序列化。
这个:
- 允许适当的框架
- 允许您检查长度
- 允许您以异步方式进行所有网络访问
- 允许您仅在知道自己拥有敏感数据时才使用解串器
关于时间:2019-01-17 标签:c#TcpListenerasyncBinaryFormatter.Deserialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10437023/