1.客户端发一串字符,服务器反应,客户端再发,服务器再反应。这种模式会发生粘包吗
2.不同客户端的包会粘包,还是只有同哥客户端的包才会粘再一起。
3.还有remobjects套件是不是也会粘包
现在才知道粘包问题,麻烦知道的朋友帮我解答一下。谢谢
2.不同客户端的包会粘包,还是只有同哥客户端的包才会粘再一起。
3.还有remobjects套件是不是也会粘包
现在才知道粘包问题,麻烦知道的朋友帮我解答一下。谢谢
解决方案 »
- 开了两个timesetevent ,第二个却不执行,这是怎么回事,着急请教大家
- 如何用流把Stringgird导到做好的Excel模板
- 求一个socketconnection三层的例子
- 定义类后不声明变量有影响吗
- 电脑系统问题,求助!
- 关于shellexecute问题 如果已经打开了一个程序 当再次点击的时候 如何唤起已经打开的实例而不是重新再起一个
- messagebox怎么用?
- 如何解决report builder 7折行乱码问题,急!!!
- 怎样在ActiveForm中添加方法
- 各位进来看看有关与dll文件的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- VclSkin原理及相关问题
- Delphi线程中生成的TIdUdpServer的UDPRead事件该如何写?
接收端也是创建一个接收缓冲区,将收到的每个发送数据包中的用户数据都按顺序放在缓冲区中。一个线程根据数据内容来确定是否接收完成一个用户数据包。完成后就给上层应用程序发一个消息。应用程序取到数据后将缓冲区中的对应数据删除。
发送线程只按固定的大小A 从缓冲区中取数据,加上顺序号和数据大小A(如果最后缓冲区数据大小比A小,则保存实际的数据大小),形成发送数据包。接收端收到数据后,检查收到的数据中有多少个发送数据包,将数据包中的数据按顺序放在接收缓冲区中,如果发送数据包让截断了,则等一下个接收事件中取得后面的内容。检查到形成了一个用户数据包了,则给上层应用发消息。里面主要用户的就是内存指针的移动,复制,删除的操作。缓冲区其实是个循环队列。要注意在向缓冲区添加数据的时候要用临界区进行锁定,因为同时发送线程还在读取数据。
接收缓冲区也是同样的。
将发送缓冲区和接收缓冲区和实现成一类使用就更方便了。
PuserInfo=^TuserInfo;
TuserInfo=packed record
A:Array[0..3] of Char;
B:TDateTime;
C:Integer;
D:Array[0..3] of Char;
end;
TUserPack=packed record
PackType:Integer;
DataSize:Integer;
Data:TuserInfo;
end;
function SendUserInfo(Value:TuserInfo):Integer;
var
UserPack:TUserPack;
begin
UserPack.PackType:=1234; //每个类型的包的类型编号是唯一的
UserPack.DataSize:=SizeOf(TuserInfo);
UserPack.Data:=Value;
//添加到发送缓冲区
end;//收到数据后根据 PackType和 DataSize来确定数据包的大小。
//WriteBuffer方法的第三个参数为True则会立即发送
http://blog.csdn.net/tigerii/archive/2009/08/18/4460292.aspx