求解決TServerSocket和TClientSocket的粘包问题的较好的解决办法(299分)

  • 主题发起人 主题发起人 余远源
  • 开始时间 开始时间

余远源

Unregistered / Unconfirmed
GUEST, unregistred user!
不要用SLEEP......
 
1.自已定义通讯协议, 一般命令头4个字节,数据长度4个字节,数据内容,等等。
2.将接收的命令放到队中
3.处理线程从队列中取出处理, 采用先进先出的方式处理队列中的命令。
 
怎么还在问这个问题?N年前就解决了!
 
找过之前的答案了,都觉得不太好
 
应用中的UDP数据包设计,TCP你就参考啰
在Internet数据传输应用中,数据包设计的合理,直接影响程序的数据传输速度和数据准确
质量。
我这里给出一种方法,虽不是很好的一种,但足以应用在上万在线用户的设计质量要求。

<一>
1. 要求:数据类型(加密,文本,数据流)。
2. 每包最大值自定: 一般在MTU 1400字节之内最佳。

<二>
1. UDP顺序组包发送.
a. 1节,包头数据类型标识(加密,文本,数据流);
b. 8节,包的流水号(以防重发);
c. 1节,写入0表示完整一包,其它表示不完整,并代表后面的多少份之几(n/x) 之类的
长度;如果完整直接进行d,写入数据长度,否则写入组头长度Length(n/x),组头内
容(n/x)。
d. 4节,写入真正的数据的长度。
2. UDP顺序拆包分析
a. 1节,读取包头数据类型标识(加密,文本,数据流);
b. 8节,读取包的流水号(比较以防重发);
c. 1节,0表示完整一包,其它表示不完整,并代表后面的多少份之几(n/x) 之类的长度;
如果完整直接进行d,读取数据长度,否则读取组头长度Length(n/x),组头内容(n/x)。
d. 4节,真正的数据的长度
 
多人接受答案了。
 
后退
顶部