gpt4 book ai didi

c# - .NET的NetworkStream是如何分隔同一个数据包中的多条消息的?

转载 作者:可可西里 更新时间:2023-11-01 02:45:52 28 4
gpt4 key购买 nike

因此,我的任务是为我们的 QA 部门创建一个工具,该工具可以离线读取数据包并正确地重新组合消息(他们不信任我们的日志……长话短说)。

我试图监听其通信的应用程序正在使用 .NET 的 TcpListener 和 TcpClient 类进行通信。拦截数据包不是问题(我正在使用 SharpPcap )。然而,事实证明,正确将数据包重新组装成应用程序级消息有点困难。

一些数据包中有一条消息的结尾和下一条消息的开头,我无法弄清楚 .NET 中的 NetworkStream 对象如何能够分辨出一个应用程序级消息在哪里结束而另一个开始。

我已经能够弄清楚,任何包含应用程序级消息结尾的数据包都将打开 TCP header “PSH”(推送)标志。但我无法弄清楚 .NET 如何知道消息结尾在该数据包中的确切位置。

一个数据包的数据可能是这样的:

/></Message><Message><Header fromSystem=http://blah

流如何知道只发送到 </Message> 的末尾到应用程序并存储其余部分,直到消息的其余部分完成?

没有为分段设置 IP 级标志,.NET 套接字不了解应用程序级协议(protocol)。所以我觉得这非常令人烦恼。任何见解将不胜感激。

最佳答案

流不知道任何事情的结束 - 它应该是应用程序协议(protocol)的一部分。

NetworkStream 没有内置任何东西来将数据转换为对象。是什么让你认为它确实如此?设法使用 NetworkStream 的代码是什么样的?您是否在进行某种形式的 XML 反序列化,读取代码在到达结束标记时自动停止?

基本上:

  • 如果您的协议(protocol)没有任何消息定界符或长度前缀,它可能应该有
  • NetworkStream 本身不太可能做任何聪明的事情 - 但如果您能告诉我们您观察到的内容,我们也许可以弄清楚发生了什么。

关于c# - .NET的NetworkStream是如何分隔同一个数据包中的多条消息的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180813/

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