IndyClient 9.0.18 接收消息死掉(100分)

  • 主题发起人 主题发起人 iampig
  • 开始时间 开始时间
I

iampig

Unregistered / Unconfirmed
GUEST, unregistred user!
在服务端用for循环向客户端发送消息测试,在接收时程序死掉(先程内死掉)。
在for循环中sleep(5)就不会死。

能否解决for循环那么频繁的消息而不会死?理论上消息接收不到,也不应该死呀。


iSize := Connection.ReadFromStack(false,2,false);
if iSize > 0 then
begin
fillMemory(@RevMsg,1024,0);//清零
Connection.ReadBuffer(RevMsg,iSize);
Synchronize(HandleInput);
end;
sleep(30);
 
在本站以前的帖子中看到如下说明:

如果你用的是Indy9.0:
a.測試目前緩衝區收到數據的字節數:
var DataSize:Integer;
begin
IdTCPClient1.ReadFromStack(false);
DataSize:=IdTCPClient1.InputBuffer.Size;
end;
b.讀取目前收到的所有數據:
var
Data:string;
begin
Data:=IdTCPClient1.CurrentReadBuffer;
end;


使用 CurrentReadBuffer解决了问题,猜想原因是使用ReadFromStack确定size时,由于消息包过于频繁,size不准确,会出错?还是缓冲区被迅速占满?
 
我觉得在服务端循环中使用sleep(5)是对的,
很多地方的资料都这样讲。在进行信息发送间隔都使用sleep(?).
 
接受答案了.
 
后退
顶部