如何获得IP地址?(100分)

  • 主题发起人 主题发起人 kingfp
  • 开始时间 开始时间
K

kingfp

Unregistered / Unconfirmed
GUEST, unregistred user!
如何获得IP地址?
 
uses winsock;

procedure GetComputerNameAndIP;
var
wVersionRequested: WORD;
wsaData: TWSAData;
p: PHostEnt;
s: array[0..128] of char;
p2: pchar;
OutPut: array[0..100] of char;
begin
{Start up WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);

{Get the computer name}
GetHostName(@s, 128);
p := GetHostByName(s);

{Get the IpAddress}
p2 := iNet_ntoa((PInAddr(p^.h_addr_list^))^);
StrPCopy(OutPut, 'Hostname: ' + Format('%s', [p^.h_Name]) + #10#13 +
'IPaddress: ' + Format('%s', [p2]));
WSACleanup;
MessageBox(0, OutPut, 'NetInfo', mb_ok or mb_iconinformation);
end;
 
根据计算机名称得到IP地址
uses
WinSock;

function GetIPByName(AName: string): 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 := '';
StrPCopy(Buffer, AName);
phe := GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do
begin
Result := StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
end;
 
第一个是得到本级计算机名和Ip的。
 
uses {...,}Winsock;

procedure ShowHostName;
var
wVersionRequested : WORD;
wsaData : TWSAData;
p : PHostEnt;
s : array[0..128] of char;
p2 : pchar;
begin
{启动 WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);

{计算机名}
GetHostName(@s, 128);
p := GetHostByName(@s);
ShowMessage(Format('Computer name is ''%s''.', [p^.h_Name]));

{IP地址}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
ShowMessage(Format('IP address is %s.',[p2]));

WSACleanup;
end;

 
查老帖,一堆答案:)
 
获的ip的 方法还有更简单的
uses IdStack
Edit3.Text :=GStack.LocalAddress;


 
通过调用API函数gethostname可以得到本机机器名,然后调用API函数gethostbyname,可以通过本机名得到IP。
API函数gethostbyaddr可以根据二进制表示法的IP地址得到计算机名。用户一般使用的是标准带点十进制的IP地址。从标准带点十进制IP地址到二进制表示法的IP地址的转换,可以通过API函数Inet_addr来实现。这样就可以通过标准的带点十进制IP地址得到计算机名。
 
获的ip的 方法还有更简单的
uses IdStack
Edit3.Text :=GStack.LocalAddress;
 
不知道用c++,这些函数是不是一样可以实现?
 
中文的机器名,好象不行
 
用indy中的idipwatch也行阿idipwatch.localip
 
后退
顶部