请问用什么命令可以获得本机的ip 和名称,
感谢!

解决方案 »

  1.   

    别人的程序
    function LocalIP:string;
    type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
    var
        phe  : PHostEnt;
        pptr : PaPInAddr;
        Buffer : array [0..63] of char;
        I    : Integer;
        GInitData      : TWSADATA;begin
        WSAStartup($101, GInitData);
        Result := '';
        GetHostName(Buffer, SizeOf(Buffer));
        phe :=GetHostByName(buffer);
        if phe = nil then Exit;
        pptr := PaPInAddr(Phe^.h_addr_list);
        I := 0;
        while pptr^[I] <> nil do begin
          result:=StrPas(inet_ntoa(pptr^[I]^));
          Inc(I);
        end;
        WSACleanup;
    end;
    ========================================
    program get_ip;
    uses
      winsock,sysutils;
    VAR
      ch : ARRAY[1..32] OF Char;
      i : Integer;
      WSData: TWSAData;
      MyHost: PHostEnt;
    begin
      IF WSAstartup(2,wsdata)<>0 THEN
        BEGIN
          Writeln('can''t start Winsock: Error ',WSAGetLastError);
          Halt(2);
        END;
      try
        IF getHostName(@ch[1],32)<>0 THEN
          BEGIN
            Writeln('getHostName failed');
            Halt(3);
          END;
      except
        Writeln('getHostName failed');
        halt(3);
      end;
      MyHost:=GetHostByName(@ch[1]);
      IF MyHost=NIL THEN
        BEGIN
          Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error
    '+IntToStr(WSAGetLastError));
          Halt(4);
        END
      ELSE
        BEGIN
            Write('address ');
             FOR i:=1 TO 4 DO
                BEGIN
                  Write(Ord(MyHost.h_addr^[i-1]));
                  IF i<4 THEN
    then     write('.')
                  ELSE
                    writeln;
                END;
       END;
    end.
    ===========================================
      

  2.   

    function getcompname: string;
    var
      aSize: DWord;
      LocalMachine: array[0..MAX_COMPUTERNAME_LENGTH] of char;
    begin
      aSize := Sizeof(LocalMachine);
      if GetComputerName(LocalMachine, aSize) then
        result := LocalMachine;
    end;
      

  3.   

    给你一个经过调试的子函数吧。
    function GetLocalIP:string;
    type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
    var
        phe  : PHostEnt;
        pptr : PaPInAddr;
        Buffer : array [0..63] of char;
        I    : Integer;
        GInitData      : TWSADATA;
    begin
        WSAStartup($101, GInitData);
        Result := '';
        GetHostName(Buffer, SizeOf(Buffer));
        phe :=GetHostByName(buffer);
        if phe = nil then Exit;
        pptr := PaPInAddr(Phe^.h_addr_list);
        I := 0;
        result:=StrPas(inet_ntoa(pptr^[I]^));
        WSACleanup;
    end;
      

  4.   

    不好意思,
    调试时TaPInAddr = array [0..10] of PInAddr就报错,
    数没有定义!我查这个PInAddr的联机帮助,竟然没有,
    后来发现PHostEnt,TaPInAddr,PaPInAddr的帮助都没有,
    我的版本是delphi5 
    是不是版本的问题?
    请指教!
      

  5.   

    这些函数全部是win32 API函数,你要自己去找一个win32 API函数大全之类的。(呵呵,我个人就有一个很不错的,你可以向我要)
      

  6.   

    下边  是BCB 代码  可以自己去改一下 不是很难的或者 参考一下  有价值的  在BCB里 可以实现__fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    void TForm1::GetHostIpAddress() //获得IP地址
    {
     struct hostent *thisHost;
     struct in_addr in;
     char MyName[80];
     char *hostname,*ptr; WORD wVersionRequested;
     WSADATA wsaData;
     int err;
     wVersionRequested = MAKEWORD( 2, 0 );
     err = WSAStartup( wVersionRequested, &wsaData );
     if( err != 0 )
       return;
     if(LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 0 )
       {
        WSACleanup( );
        return;
      } if(gethostname(MyName,80)==SOCKET_ERROR)
       return; if(!(thisHost=gethostbyname(MyName)))
       return;
     memset((void *)&in,sizeof(in),0);
     hostname=thisHost->h_name;
     in.s_addr=*((unsigned long *)thisHost->h_addr_list[0]);
     if(!(ptr=inet_ntoa(in)))
       return;
     WSACleanup( );
     Edit1->Text=AnsiString(ptr);
     Edit2->Text=AnsiString(hostname);
    }
    //---------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
    {
     GetHostIpAddress();        
    }
      

  7.   

    大部分 都是API 函数  可以同用的在BCB里  是正确的代码
      

  8.   

    调用 GetHostName 的时候出错!!
      

  9.   

    dos命令 ipconfig /all就可以获得全部信息
      

  10.   

    可以了, 关键是要引用 winsock 单元, 我引用的 idwinsock 就出错了...只怪Delphi的帮助上什么都不写。