我的机器是在局域网内,请问有什么好的办法判断是否连机了呢?急

解决方案 »

  1.   

    用来判断计算机是否连接到internet 的.里面是通过ping 来判断的, 可以修改来判两台机是否连接
    type
      PIPOptionInformation = ^TIPOptionInformation;
      TIPOptionInformation = packed record
        TTL: Byte;
        TOS: Byte;
        Flags: Byte;
        OptionsSize: Byte;
        OptionsData: PChar;
      end;
      type PIcmpEchoReply = ^TIcmpEchoReply;
      TIcmpEchoReply = packed record
        Address: DWord;
        Status: DWord;
        RTT: DWord;
        DataSize:Word;
        Reserved: Word;
        Data: Pointer;
        Options: TIPOptionInformation;
      end;
      TIcmpCreateFile = function: THandle; stdcall;
      TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;
      TIcmpSendEcho = function(IcmpHandle:THandle;
                               DestinationAddress:DWord;
                               RequestData: Pointer;
                               RequestSize: DWord;
                               RequestOptions: PIPOptionInformation;
                               ReplyBuffer: Pointer;
                               ReplySize: DWord;
                               Timeout: DWord): DWord; stdcall;type
     private
        { Private declarations }
            hICMP: THANDLE;
      IcmpCreateFile : TIcmpCreateFile;
      IcmpCloseHandle:TIcmpCloseHandle;
      IcmpSendEcho: TIcmpSendEcho;
      public
       { Public declarations }
        hICMPdll: HMODULE;  end;implementation
    var
      IPOpt:TIPOptionInformation;
      FIPAddress:DWORD;
      pReqData,pRevData:PChar;
      pIPE:PIcmpEchoReply;
      FSize: DWORD;
      MyString:string;
      FTimeOut:DWORD;
      BufferSize:DWORD;
      Date1,Date3,Date4:TDateTime;
      TableName1,
      TableName3,Tablename4:string;
      Num1,Num2,Num3,Num4:integer;
      i:integer;
      DateStr1:String;
    begin
    hICMPdll := LoadLibrary('icmp.dll');
    @ICMPCreateFile:= GetProcAddress(hICMPdll, 'IcmpCreateFile');
    @IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');
    @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');
    hICMP := IcmpCreateFile;
    FIPAddress:=inet_addr(PChar('169.254.3.253'));//IP地址  改为对方计算机IP
    FSize:=80;
    BufferSize:=SizeOf(TICMPEchoReply)+FSize;
    GetMem(pRevData,FSize);
    GetMem(pIPE,BufferSize);
    FillChar(pIPE^, SizeOf(pIPE^), 0);
    pIPE^.Data := pRevData;
    MyString := 'Argen Ping32 Sending Message.';
    pReqData := PChar(MyString);
    FillChar(IPOpt, Sizeof(IPOpt), 0);
    IPOpt.TTL:= 64;
    FTimeOut :=500;
    IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),@IPOpt, pIPE,
            BufferSize, FTimeOut);
    try
    try
    if pReqData^ = pIPE^.Options.OptionsData^ then
    showmeesage('目标到达');
    except
    Messagebox(self.handle,'目标不可到','Ping32',64)
    end;
    finally
    FreeMem(pRevData);
    FreeMem(pIPE);
    end;
    end;end.