一定要知道对方的ip吧
知道了ip,用ping的方法可以实现,如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, winsock;type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure ShowError(error: Integer);
  public
    { Public declarations }
  end;  PIPOptionInformation = ^TIPOptionInformation;
  TIPOptionInformation = packed record
     TTL:         Byte;      // Time To Live (used for traceroute)
     TOS:         Byte;      // Type Of Service (usually 0)
     Flags:       Byte;      // IP header flags (usually 0)
     OptionsSize: Byte;      // Size of options data (usually 0, max 40)
     OptionsData: PChar;     // Options data buffer
  end;  PIcmpEchoReply = ^TIcmpEchoReply;
  TIcmpEchoReply = packed record
     Address:       DWord;                // replying address
     Status:        DWord;                // IP status value (see below)
     RTT:           DWord;                // Round Trip Time in milliseconds
     DataSize:      Word;                 // reply data size
     Reserved:      Word;
     Data:          Pointer;              // pointer to reply data buffer
     Options:       TIPOptionInformation; // reply options
  end;  TIcmpCreateFile = function: THandle; stdcall;
  TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;
  TIcmpSendEcho = function(
     IcmpHandle:          THandle;
     DestinationAddress:  DWord;
     RequestData:         Pointer;
     RequestSize:         Word;
     RequestOptions:      PIPOptionInformation;
     ReplyBuffer:         Pointer;
     ReplySize:           DWord;
     Timeout:             DWord
  ): DWord; stdcall;var
  Form1: TForm1;implementation{$R *.DFM}const
  IcmpDLL = 'icmp.dll';var
  hICMPlib: HModule;
  IcmpCreateFile : TIcmpCreateFile;
  IcmpCloseHandle: TIcmpCloseHandle;
  IcmpSendEcho:    TIcmpSendEcho;
  hICMP: THandle;                     // Handle for the ICMP Callsprocedure TForm1.FormCreate(Sender: TObject);
var
  wsadata: TWSAData;
begin
  // initialise winsock
  if WSAStartup($101,wsadata) <> 0 then begin
    ShowMessage('Error initialising Winsock');
    halt;
  end;  // register the icmp.dll stuff
  hICMPlib := loadlibrary(icmpDLL);
  if hICMPlib <> null then begin
    @ICMPCreateFile := GetProcAddress(hICMPlib, 'IcmpCreateFile');
    @IcmpCloseHandle:= GetProcAddress(hICMPlib, 'IcmpCloseHandle');
    @IcmpSendEcho:= GetProcAddress(hICMPlib, 'IcmpSendEcho');
    if (@ICMPCreateFile = Nil) or (@IcmpCloseHandle = Nil) or (@IcmpSendEcho = Nil) then begin
      ShowMessage('Error loading dll functions');
      halt;
    end;
    hICMP := IcmpCreateFile;
    if hICMP = INVALID_HANDLE_VALUE then begin
      ShowMessage('Unable to get ping handle');
      halt;
    end;
  end
  else begin
    ShowMessage('Unable to register ' + icmpDLL);
    halt;
  end;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Free icmp.dll
  IcmpCloseHandle(hICMP);
  FreeLibrary(hICMPlib);
  // free winsock
  if WSACleanup <> 0 then ShowMessage('Error freeing winsock');
end;procedure TForm1.Button1Click(Sender: TObject);
const
  Size = 56;
  TimeOut = 3000;
var
  Address: DWord;                     // Address of host to contact
  HostName, HostIP: String;           // Name and dotted IP of host to contact
  Phe: PHostEnt;                      // HostEntry buffer for name lookup
  BufferSize, nPkts: Integer;
  pReqData, pData: Pointer;
  pIPE: PIcmpEchoReply;               // ICMP Echo reply buffer
  IPOpt: TIPOptionInformation;        // IP Options for packet to send
begin
  // Do a lookup  Address := inet_addr(PChar(Edit1.Text));  if (Address = INADDR_NONE) then begin
    Phe := GetHostByName(PChar(Edit1.Text));
    if Phe = Nil then ShowError(WSAGetLastError)
    else begin
      Address := longint(plongint(Phe^.h_addr_list^)^);
      HostName := Phe^.h_name;
      HostIP := StrPas(inet_ntoa(TInAddr(Address)));
    end;
  end
  else begin
    Phe := GetHostByAddr(@Address, 4, PF_INET);
    if Phe = Nil then ShowError(WSAGetLastError)
    else begin
      HostName := Phe^.h_name;
      HostIP := StrPas(inet_ntoa(TInAddr(Address)));
    end;
  end;  if Address = INADDR_NONE then begin
    Memo1.Lines.Add('Cannot resolve hostname ' + Edit1.Text);
  end
  else
  begin
    Memo1.Lines.Add('Sending ' + IntToStr(Size) + ' bytes to ' +
      HostName + ' (' + HostIP + ')');    // Get some data buffer space and put something in the packet to send
    BufferSize := SizeOf(TICMPEchoReply) + Size;
    GetMem(pReqData, Size);
    GetMem(pData, Size);
    GetMem(pIPE, BufferSize);
    FillChar(pReqData^, Size, $AA);
    pIPE^.Data := pData;    // Finally Send the packet
    FillChar(IPOpt, SizeOf(IPOpt), 0);
    IPOpt.TTL := 64;
    NPkts := IcmpSendEcho(hICMP, Address, pReqData, Size,
      @IPOpt, pIPE, BufferSize, TimeOut);
    if NPkts = 0 then ShowError(GetLastError)
      else
    begin
      //ShowMessage('ok');
      HostIP := StrPas(inet_ntoa(TInAddr(pIPE^.Address)));
      Memo1.Lines.Add('Received ' + IntToStr(pIPE^.DataSize) +
        ' bytes from ' + HostIP +
        ' in ' + IntToStr(pIPE^.RTT) + ' msecs')
    end;    // Free those buffers
    FreeMem(pIPE);
    FreeMem(pData);
    FreeMem(pReqData);
  end;
end;procedure TForm1.ShowError(error: integer);
begin
  Memo1.Lines.Add('Error: ' + IntToStr(error));
end;end.