我用TIdTCPClient的readln读取服务器的数据时候,有时候能读到,有时候读不到,读不到的时候,程序就死那儿,怎么解决这种情况,望高手指点

解决方案 »

  1.   

    IdTCPClient1.ReadTimeout := 1000;
     if IdTCPClient1.ReadFromStack()>0 then
       IdTCPClient1.ReadLn()
      

  2.   

    if fSocket.ReadFromStack(False,1000,False) > 0 then
      fInfo := fSocket.ReadLn('##',1000,-1);
    这样处理也不行,
    log日志显示还是到发送命令后,没有接受到内容,然后读取的线程也死掉了
      

  3.   

    while (not self.Terminated)  do
      begin
        for i := 0 to fListCSocketCS.Count - 1 do//多个socket
        begin
            if fCSocket.Connected then fCSocket.Disconnect;
            fCSocket.Host := TCSocketCS(fListCSocketCS.Objects[i]).Host;
            fCSocket.Port := TCSocketCS(fListCSocketCS.Objects[i]).Port;
            fADDR := TCSocketCS(fListCSocketCS.Objects[i]).ADDR;
            try
                fCSocket.Connect(1000);
              except
                Continue;
            end;
            Try
              if fCSocket.ReadFromStack(False,1000,False) > 0 then
              fInfo := Trim(fCSocket.ReadLn('##',1000,-1));
              //数据处理    
            finally
            fCSocket.DisconnectSocket;
            end;
        end;
      end;