在服务端用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);

解决方案 »

  1.   

    在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不准确,会出错?还是缓冲区被迅速占满?
      

  2.   

    for循环里面死掉?? 是服务器端死掉? 
    如果是客户端死掉,由于服务器是循环向不同客户端发消息的,也就是说客户端只是接收了一个消息就死? 企不是客户端有问题
    一般情况下客户端接收都要判断一下
    ires := DM.tcpLog.ReadFromStack;
        if ires > 0 then
      

  3.   

    我是在服务端用for循环向同一个客户端发消息,目的就是测试客户端在高强度的消息下的情况。