如何在接收之前不知道数据包大小的情况下通过 TCP 套接字接收数据包
本文关键字:数据包 情况下 套接字 TCP 不知道 | 更新日期: 2023-09-27 18:31:39
我正在开发一个网络应用程序,它可以将实时视频源从一个应用程序异步发送到另一个应用程序,有点像Skype。我遇到的主要问题是我希望能够发送帧,但不必每次在接收之前都知道它们的大小。
处理图像时 AForge.NET 的工作方式是当前帧的大小很可能与之前帧的大小不同。大小不是静态的,所以我只是想知道是否有办法实现这一目标。而且,我已经尝试先发送长度,然后再发送框架,但这不是我想要的。
首先,确保您了解TCP本身根本没有"数据包"的概念,而不是在用户代码级别。如果一个人用数据包来概念化一个人的TCP网络I/O,他们可能会弄错。
话虽如此,您可以在 TCP 字节流上施加数据包结构。要做到这一点,在数据包的大小并不总是相同的情况下,您只能传输数据之前的长度,或者以某种方式分隔数据,例如将其包装在自描述编码中,或以某种方式终止数据。
请注意,在处理二进制数据时,围绕数据添加结构(编码、终止等)充满了麻烦,因为通常需要二进制数据来支持任何字节组合。这引入了转义数据的需求,或者能够以其他方式标记通常看起来像分隔符或终止符的内容,以便可以将其视为二进制数据而不是数据的某个边界。
就个人而言,我只会在数据之前写一个长度。这是一种简单且常用的技术。如果你仍然不想那样做,你应该具体一点,并解释你为什么不这样做,以便更好地理解你的具体情况。