Sig*_*101 1 c++ client tcp c++builder-5
我们的服务器似乎是基于数据包的。它是对旧的基于串行的系统的改编。多年来,它已被添加、修改、重建等。由于 TCP 是流协议而不是数据包协议,因此有时数据包会被分解。ServerSocket 的设计方式是,当 Client 发送数据时,部分数据包含我们消息的大小,例如55
. 有时这些数据包被分成多个部分。它们按顺序到达,但由于我们不知道消息将如何拆分,因此我们的服务器有时不知道如何识别拆分消息。
所以,已经给了你背景信息。如果数据包被拆分,重建数据包的最佳方法是什么?我们正在使用 C++ Builder 5(是的,我知道,旧的 IDE,但这是我们目前可以使用的全部。大量工作需要在 .NET 或更新的技术中重新设计)。
TCP
保证数据将按照发送的顺序到达。
也就是说,您可以将所有传入的数据附加到缓冲区。然后检查您的缓冲区是否包含一个或多个数据包,并将它们从缓冲区中删除,将所有剩余数据保留在缓冲区中以备将来检查。
当然,这假设您的数据包有一些标头指示以下数据的大小。
让我们考虑具有以下结构的数据包:
[LEN] X X X...
Run Code Online (Sandbox Code Playgroud)
其中LEN
是数据的大小,每个 X 是一个字节。
如果您收到:
4 X X X
[--1--]
Run Code Online (Sandbox Code Playgroud)
数据包不完整,您可以将其留在缓冲区中。然后,其他数据到达,您只需将其附加到缓冲区:
4 X X X X 3 X X X
[---2---]
Run Code Online (Sandbox Code Playgroud)
然后,您有 2 条完整的消息可以轻松解析。
如果您这样做,请不要忘记以与主机无关的形式发送任何长度(ntohs
并且ntohl
可以提供帮助)。
归档时间: |
|
查看次数: |
1805 次 |
最近记录: |