小弟用TidUDPServer向一个网络设备发出一段命令后,
但是不知道网络是否连接良好,(如果连接良好,设备会有返回命令!!)
现在,我想写一个东西来判断在一定的时间(如 5秒)内是否有数据返回,
(也就是在这段时间内不断的扫描一个端口,检查是否有数据。)
如果没有,则打印“连接超时!!”,
请问这样的函数该如何写,最好用API函数,

解决方案 »

  1.   

    procedure TestConnectUDPRead(Sender: TObject;
      AData: TStream; ABinding: TIdSocketHandle);
    var
      sErr : string;
    begin
      StreamToBytes(AData,ArrRet);  if(GetErrorCode(ArrRet)<>0)then
      begin
        sErr := IntToStr(GetCmdType(ArrRet))+':'+IntToStr(GetErrorCode(ArrRet));
        Mm_Msg.Lines.Add('Any error was occured! '+sErr);
      end;         
      case GetCmdType(ArrRet) of
        5:begin
            UDPSendCommand(UDPServer,lvDevice.Selected.SubItems.Strings[5],
              StrToInt(lvDevice.Selected.SubItems.Strings[6]),
              UDP_CheckAdmin(DevID,SerialNo,sAdminCode),sErr);
            ///--------------------------------------(1)
            Mm_Msg.Lines.Add('Connect Device Success!');
          end;
        6:begin
            Mm_Msg.Lines.Add('Disconnect Device Success!');
            exit;
          end;
        7:begin
            UDPSendCommand(UDPServer,lvDevice.Selected.SubItems.Strings[5],
              StrToInt(lvDevice.Selected.SubItems.Strings[6]),
              UDP_DisConnect(DevID,SerialNo),sErr);
            ///--------------------------------------(2)
            Mm_Msg.Lines.Add('Check AdminCode Success!');
          end;
      end;
    end;
    我是这样做的,
    在接受返回数据的事件里也做发命令,
    俺现在想在1、2 处加判断超时语句,
    你刚才说的意思我懂,但是,最关键的没有说出来,那就是如何监听桓龆丝谟忻挥惺莘祷兀浚浚浚。。?
    分少可以加,麻烦大家了,
    多谢