在服务端用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);
在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);
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不准确,会出错?还是缓冲区被迅速占满?
如果是客户端死掉,由于服务器是循环向不同客户端发消息的,也就是说客户端只是接收了一个消息就死? 企不是客户端有问题
一般情况下客户端接收都要判断一下
ires := DM.tcpLog.ReadFromStack;
if ires > 0 then