给你一个函数:
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;
    while pptr^[I] <> nil do begin
      result:=StrPas(inet_ntoa(pptr^[I]^));
      Inc(I);
    end;
    WSACleanup;
end;

解决方案 »

  1.   

    小虾兄,转载也要注明出处啊,呵呵
    主  题:各位高手.我想建立一个程序,功能是查自己机器上的IP地址.
    作  者:sforever
    所属论坛:Delphi
    问题点数:20
    回复次数:10
    发表时间:2001-5-29 8:02:00
     回复人:TCXHL(随风逝去) (2001-5-29 12:07:00)  得0分 
    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;
    在你的按钮事件代码中调用此函数即可,使用时先在Uses语句中添加Winsock单元  
      

  2.   

    小虾兄,转载也要注明出处啊,呵呵
    主  题:各位高手.我想建立一个程序,功能是查自己机器上的IP地址.
    作  者:sforever
    所属论坛:Delphi
    问题点数:20
    回复次数:10
    发表时间:2001-5-29 8:02:00
     回复人:TCXHL(随风逝去) (2001-5-29 12:07:00)  得0分 
    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;
    在你的按钮事件代码中调用此函数即可,使用时先在Uses语句中添加Winsock单元  
      

  3.   

    那个函数我也知道,只是想知道能不能用组件来完成。vb中的winsocket能行,delphi中就不行了?
      

  4.   

    在此向TCXHL(随风逝去)兄表示感谢,愚弟初来乍到,请多观照!
      

  5.   

    可以用TCustomWinSocket.LocalAddress
      

  6.   

    加入3个控件:NMDT:TNMDayTime; IPRdit:TEdit; //用于显示得到的IP
          Button1:TButton;  //均用默认属性
    在Button1的onClick中加入  IPEdit.Text:=NMDT.LocalIP
    点击按钮即可得到IP     
      

  7.   

    对不起,记错了。serversocket1.Socket.LocalAddress是用来指定
    Tserversocket连接时本地IP的,不是用来获取本地IP
      

  8.   

    to chenshirong
    能不能不用其它组件,就用现成的Tserversocket ,如果要用其它组件,我不如用函数了
      

  9.   

    sorry,暂时我还没有其他的方法
      

  10.   

    用serversocket/clientsocket.socket.localaddress属性就可以了。
      

  11.   

    serversocket/clientsocket.socket.localaddress属性
      

  12.   

    to zhoudut
    兄弟,你试过吗,我以前就试过,根本不行啊,返回的是一个空字符串
      

  13.   

    可以,我试过的。或这你用remoteaddress也可以的。呵呵。