我也是初学者。看了很多处理粘包的代码和方案总结下来就3种方法
包长和实际包长对比
1.包长相等跳过
2.大于拆包
3.小于合并可是,我用线程也好 进程也罢 都出现一个问题。那个包是处理的完美啊 ,但是效率...
一个包 才几十秒 不大不大
对了 补充下 我需要的是ClientSocket 高效分包代码
高手出手吧 我牙口好什么线程,进程都能消化
来吧! COME ON 别让人说DELPHI 的程序员都转行C++了,找资料 看C吧
包长和实际包长对比
1.包长相等跳过
2.大于拆包
3.小于合并可是,我用线程也好 进程也罢 都出现一个问题。那个包是处理的完美啊 ,但是效率...
一个包 才几十秒 不大不大
对了 补充下 我需要的是ClientSocket 高效分包代码
高手出手吧 我牙口好什么线程,进程都能消化
来吧! COME ON 别让人说DELPHI 的程序员都转行C++了,找资料 看C吧
解决方案 »
- 向一个flash网页的文本框发送字符串
- 大家不用进来了,私人贴,谢谢。
- 在ClientDataSet.Delta的修改行里如何知道修改的了哪些列和key(主键)
- EAN13 条形码问题?大虾们!不买,也来瞧瞧!
- 急,在先等,想了很久,帮忙看看,谢谢!!
- 怎样返回路径
- 來鳥問題 midas.dll是如何產生的﹐里面集成代碼嗎﹐三層里面一定要midas.dll嗎
- 如何使用TListView 的OnDrawItem event?
- 我在form1中动态创建了form2和form2中的一个button1.如何给button1加入单击事件.
- 一个有关dll的简单问题
- 这个程序是怎么打开的?
- 新人学习Delphi的一些问题,求解!
2. Parse the binary stream
但给你一个那建议,你应该看看CNPack 控件包,里面有粘包的处理代码。而且还有IOCP的实例,都写得不错。
TMyMemory=class
private
FBuff:array[0..8191]of byte;
FSeek:integer;
FCount:integer; public
procedure Add(const buf;Len:integer);
procedure Read(var buf;Len:integer);
constructor Create;
end;constructor TMyMemory.Create;
begin
FCount:=0; FSeek:=0;
end;procedure TMyMemory.Add(const buf;Len:integer);
begin
move(buf, FBuff[FCount] ,Len);
inc(FCount);
end;procedure TMyMemory.Read(var buf;Len:integer);
begin
move(FBuff[FSeek],buf,Len);
inc(FSeek);
if FSeek=FCount then
begin
FCount:=0; FSeek:=0;
end;
end;