在程序中定义一个线程,send数据包给服务器,然后等待服务器的回复信息。
这里就涉及到了超时,不可能无限期的等待下去。
请问各位,一般都是这样设置超时机制的啊??????  多谢

解决方案 »

  1.   

    我是这么写的,不过好像不能用,程序运行到  recvlen:=recv(FSocket,buf,sizeof(buf),0) ;时,如果收不到字符串就停在这里了,郁闷!!!  各位大哥指导下阿,。。
    var timeout:integer;
               timeout:=1; 
          timeout:=timeout+1;
          fillchar(buf, sizeof(buf),#0);
          recvlen:=recv(FSocket,buf,sizeof(buf),0) ;
          if (recvlen>0) and (timeout<10) then
           begin
           mainform.Memo1.Lines.Add(datetimetostr(now())+'   '+copy(buf,0,recvlen));
           showmessage('done');
           update_meterchange.Close;
           exit;
           end
          else
           begin
             showmessage('setting failed');
             exit;
           end;
      

  2.   

    解决办法1。 开个线程,然后用time的vcl空间在控制时间
            2。 用indy的组件,它里面是有超时的机制的!
      

  3.   

    阻塞方式,要配合SELECT使用才能较好处理超时。