有这样的函数通过机器名得到IP地址,通过IP地址得到机器名!
function NameToIP(SName:String):Pchar;//通过机器名得到IP地址
var
   WSAData: TWSAData;
   HostEnt: PHostEnt;
begin
result:='';
WSAStartup(2, WSAData);
HostEnt := gethostbyname(PChar(SName));
if HostEnt <> nil then
begin
with HostEnt^ do
result:=Pchar(Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]));
end;
WSACleanup;
end;
你的第二个问题没有具体情况很难回答,你想做什么,如果你的客户数量少有少的解决办法,多有多的解决办法!

解决方案 »

  1.   

    //以前寫的東西........
    procedure TForm2.BitBtn14Click(Sender: TObject);var
      WSAData : TWSAData;
      HostEnt : PHostEnt;
      sComputerName,sIp :String;
      i : integer;
    begin
      Edit6.Text := '';
        if Edit5.Text='' then
        begin
          ShowMessage('Computer Name not is Null!');
          exit;
        end;
        sComputerName := Edit5.Text;
        WSAStartup(2,WSAData);
        HostEnt := GetHostByName(PChar(sComputerName));    if HostEnt <> nil then
        begin
          with HostEnt^ do
           sIp := Format('%d.%d.%d.%d',[Byte(h_addr^[0]),Byte(h_addr^[1]),Byte(h_addr^[2]),Byte(h_addr^[3])]);
        end
        else     ShowMessage('Computer Name( '+ Edit5.Text +' ) not is found or Local Net is error!');    WSACleanup;
        Edit6.Text := sIp;
    end;
      

  2.   

    to:luoshumeng
    给个少的情况吧
      

  3.   

    WSAData: TWSAData;
       HostEnt: PHostEnt;
    use中要加入什么单元,怎么help中查不到这两个数据类型?
      

  4.   

    两个都没有问题的,我给我发E_mail,我给你应用程序!一切都0k!
      

  5.   

    转贴:
    Delphi编程实现Ping操作 
      张泰立   使用过网络的用户都熟悉“Ping”这个指令,它是一个DOS下的可执行文件,一般用它来检查网络连接的好坏程度。其基本原理是利用TCP/IP协议包中ICMP协议中的一个功能,即向所指定的计算机发送一个请求,收到请求的计算机返回一个应答,借此来判断该计算机是否在网上运行或者检查网络连接是否稳定可靠。在Ping程序执行过程中,双方计算机所耗费的资源都很少,因此,它是一个非常实用的工具。   我们可以通过编程来实现“Ping”操作,对其加以改进,使之具有Windows的界面风格,显示比DOS更加直观。   首先,对编程中需要的动态链接库作一简要说明:在Windows的System目录下,你可以找到Icmp.dll文件,该动态链接库提供了ICMP协议的所有功能,我们的编程就建立在对该动态链接库的调用上。   Icmp.dll文件内的调用函数说明如下:   1、IcmpCreateFile   打开一个句柄,通过该句柄你可以发送ICMP的请求回送报文。   2、IcmpCloseHandle   关闭你通过IcmpCreateFile函数打开的句柄。   3、IcmpSendEcho   通过你打开的句柄发送ICMP请求,在超时或应答报文接收后返回。其参数基本上和它的帧结构一致,可参看下面的程序部分,其具体含意你可以参看有关ICMP协议的书籍。   初步了解了上述的三个函数后,我们就可以开始编程了。   首先,我们的程序运行后应该有如图1所示的基本功能。为此,我们可先在Delphi的窗口中放入右上图中所示的控件,如按钮、编辑框和文本显示框等。   (G72.JPG)   例程运行示意图   然后,在程序的开始部分(FormCreate)对WinSocket进行初始化,其作用是申明使用的版本信息,同时调入Icmp.dll库。   type    PIPOptionInformation = ^TIPOptionInformation;    TIPOptionInformation = packed record    TTL: Byte;    TOS: Byte;    Flags: Byte;    OptionsSize: Byte;    OptionsData: PChar;    end;    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: Word;    RequestOptions: PIPOptionInformation;    ReplyBuffer: Pointer;    ReplySize: DWord;    Timeout: DWord    ): DWord; stdcall;    TMyPing = class(TForm)    Panel1: TPanel;    Label1: TLabel;    PingEdit: TEdit;    ExeBtn: TButton;    Button2: TButton;    Button3: TButton;    StatusShow: TMemo;    procedure Button3Click(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure ExeBtnClick(Sender: TObject);    private    { Private declarations }    hICMP: THANDLE;    IcmpCreateFile : TIcmpCreateFile;    IcmpCloseHandle: TIcmpCloseHandle;    IcmpSendEcho: TIcmpSendEcho;    public    { Public declarations }   end;   procedure TMyPing.FormCreate(Sender: TObject);   var    WSAData: TWSAData;    hICMPdll: HMODULE;   begin    WSAStartup($101, WSAData);    // Load the icmp.dll stuff    hICMPdll := LoadLibrary('icmp.dll');    @ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile');    @IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');    @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');    hICMP := IcmpCreateFile;    StatusShow.Text := '';    StatusShow.Lines.Add('目的IP地址 字节数 返回时间(毫秒)');   end;   接下来,就要进行如下所示的Ping操作的实际编程过程了。   procedure TMyPing.ExeBtnClick(Sender: TObject);   var    IPOpt:TIPOptionInformation;// IP Options for packet to send    FIPAddress:DWORD;    pReqData,pRevData:PChar;    pIPE:PIcmpEchoReply;// ICMP Echo reply buffer    FSize: DWORD;    MyString:string;    FTimeOut:DWORD;    BufferSize:DWORD;   begin    if PingEdit.Text <> '' then    begin    FIPAddress := inet_addr(PChar(PingEdit.Text));    FSize := 40;    BufferSize := SizeOf(TICMPEchoReply) + FSize;    GetMem(pRevData,FSize);    GetMem(pIPE,BufferSize);    FillChar(pIPE^, SizeOf(pIPE^), 0);    pIPE^.Data := pRevData;    MyString := 'Hello,World';    pReqData := PChar(MyString);    FillChar(IPOpt, Sizeof(IPOpt), 0);    IPOpt.TTL := 64;    FTimeOut := 4000;    IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString), @IPOpt, pIPE, BufferSize, FTimeOut);    if pReqData^ = pIPE^.Options.OptionsData^ then    begin    StatusShow.Lines.Add(PChar(PingEdit.Text) + ' ' +IntToStr(pIPE^.DataSize) + ' ' +IntToStr(pIPE^.RTT));    end;    FreeMem(pRevData);    FreeMem(pIPE);    end   end;   通过上面的编程,我们就实现了Ping功能的界面操作。实际上,ICMP协议的功能还有很多,都可以通过对Icmp.dll的函数调用来实现。 
      

  6.   

    将某一主机域名解析为IP地址。
    使用 WinSock 单元;
    过程如下:
    function HostToIP(Name: string; var Ip: string): Boolean;
    var
      wsdata : TWSAData;
      hostName : array [0..255] of char;
      hostEnt : PHostEnt;
      addr : PChar;
    begin
      WSAStartup ($0101, wsdata);
      try
        gethostname (hostName, sizeof (hostName));
        StrPCopy(hostName, Name);
        hostEnt := gethostbyname (hostName);
        if Assigned (hostEnt) then
          if Assigned (hostEnt^.h_addr_list) then begin
            addr := hostEnt^.h_addr_list^;
            if Assigned (addr) then begin
              IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
              byte (addr [1]), byte (addr [2]), byte (addr [3])]);
              Result := True;
            end
            else
              Result := False;
          end
          else
            Result := False
        else begin
          Result := False;
        end;
      finally
        WSACleanup;
      end
    end;