IndyClient 9.0.18 接收消息死掉

Donald_fu 2006-06-20 10:38:50
在服务端用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);

...全文
300 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dabaicai 2006-06-21
  • 打赏
  • 举报
回复
for循环里面死掉?? 是服务器端死掉?
如果是客户端死掉,由于服务器是循环向不同客户端发消息的,也就是说客户端只是接收了一个消息就死? 企不是客户端有问题
一般情况下客户端接收都要判断一下
ires := DM.tcpLog.ReadFromStack;
if ires > 0 then
Donald_fu 2006-06-21
  • 打赏
  • 举报
回复
在delphibbs以前的帖子中看到如下说明:

如果你用的是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不准确,会出错?还是缓冲区被迅速占满?
Donald_fu 2006-06-21
  • 打赏
  • 举报
回复
我是在服务端用for循环向同一个客户端发消息,目的就是测试客户端在高强度的消息下的情况。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧