如何is.NET's NetworkStream定界的多个消息在同一包?
-
24-09-2019 - |
题
所以我一直在的任务是创造一个工具,为我们的质量保证部门,可以读取包脱线和重新消息正确地(他们不信任我们的日志...很长的故事).
该应用程序的通信我试图听取在对使用。净的TcpListener和TcpClient类通信。截获的包并不是一个问题(我在使用 SharpPcap).但是, 正确 重组的组成应用程序级别的消息被证明是稍微困难。
一些分组已经结束的一个信息和开始的下一个消息他们,我可想不出如何NetworkStream对象。净是能够告诉其中一个应用程序级别的消息结束和另一个开始。
我已经能够找出的任何分组包含端应用程序级别信息将有TCP头"切"(Push)标志开启。但是我不能找出如何。净知道在那里完全结束的消息是内部的,分组。
数据的一个分组,可能是这样的:
/></Message><Message><Header fromSystem=http://blah
如何在流知道只送结束 </Message>
该应用程序和储存的休息,直到剩余的消息是完整的?
有没有IP级设置标志,用于碎片。净插座有没有知识的应用水平协议。所以我觉得这非常令人烦恼。任何了解,将不胜感激。
解决方案
流不知道结束任何事情-这应该应用程序的一部分的协议。
NetworkStream
没有什么建成,它把数据转换成一个对象。是什么让你觉得它不会吗?什么样的代码,其管理使用NetworkStream看起来像什么?你也许做一些形式的XML反, 阅读 代码自动停止当达到的结束标记?
基本上:
- 如果协议没有任何消息分隔或长前缀,它也许应该
NetworkStream
本身是非常不可能做什么聪明的-但如果你能告诉我们什么你在观察,我们也许可以作出什么事情。
不隶属于 StackOverflow