请问用什么控件和方法,检查局域网里(已知IP)的电脑是否打开?原则:能ping通就表示电脑打开。

解决方案 »

  1.   

    如果就检查ping的话,就比较简单了
      IdIcmpClient1.Host := '127.0.0.1;
      IdIcmpClient1.Ping;
    procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
      const AReplyStatus: TReplyStatus);
    begin
      Memo1.Lines.Add(Self.IdIcmpClient1.Host);
      Memo1.Lines.Add(Format('FromIpAddress: %s, BytesReceived: %d, MsgType: %d, '
        + 'MsRoundTripTime: %d, SequenceId: %d, TimeToLive: %d, ReplyStatusType: %d', [
        AReplyStatus.FromIpAddress,
        AReplyStatus.BytesReceived,
        AReplyStatus.MsgType,
        AReplyStatus.MsRoundTripTime,
        AReplyStatus.SequenceId,
        AReplyStatus.TimeToLive,
        Integer(AReplyStatus.ReplyStatusType)
      ]));
    end;
      

  2.   

    但ping不到并不表示电脑没有开机,或许开了防火墙,呵呵
      

  3.   

    不会堵塞网络的,每个ping包只有很少的数据另外可以把间隔时间稍微放长些,比如10秒或30秒ping一次之类的多线程的话,把这个Indy控件封装在线程中,根据需要创建出多个线程,而且可以把每个线程扫描的范围划分一下,比如线程1扫描192.168.0.1~192.168.0.25,线程2扫描192.168.0.26~192.168.0.50等等