如何得到本机IP地址

dolemin 2003-02-25 10:30:50
如题,最好说出用法,谢谢!
...全文
122 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdf_hubei 2003-03-31
  • 打赏
  • 举报
回复
: dolemin(骏驰) ( ) 信誉:100 2003-2-25 10:42:13 得分:0


to xdf_hubei: LocalIPList从哪儿得来的?
to bluemeteor(挂月):研究中。。。
谢谢!

LocalIPList: WSocket单元里面有的啊

一般用D5做网络都有SOCKET2的接口单元




glacier1213 2003-03-14
  • 打赏
  • 举报
回复
如果嫌上面方法太不专业,而一楼的仁兄的代码你又看不懂,你还可以在程序前面加上下面这段代码,你不需要看懂它,调用ggLocalIP函数就行,不需要参数:
function ggLocalIP : 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;
要查IP地址时,直接调用,比如Edit1.Text:=ggLocalIP;
lzf913 2003-03-14
  • 打赏
  • 举报
回复
给你一个最简单的,要用到winsock单元。

procedure TForm1.Button1Click(Sender: TObject);
var
wVersion: Word;
sData: TWSAData;
P: PHostEnt;
S: array[0..128]of char;
begin
wVersion := MakeWord(1,1);
WSAStartup(wVersion,sData);
try
gethostname(@S,128);
P:=gethostbyname(@S);
edit1.text:=inet_ntoa(PinAddr(P^.h_addr_list^)^);
finally
WSACleanup;
end;
end;
glacier1213 2003-03-14
  • 打赏
  • 举报
回复
如果你是用Delphi6,在FastNet面版中的大多数控件都提供查LocalIP方法看本机IP的方法,例如:NMSMTP、NMPOP3等等控件,比如你放上一个用NMSMTP控件和一个按钮,一个Edit控件,在按钮OnClick事件中写上如下代码就可以了:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=NMSMTP1.LocalIP;
end;
aonesky 2003-03-14
  • 打赏
  • 举报
回复
procedure TForm44.Button2Click(Sender: TObject);
var cIP:string;
hent:phostent;
ipaddr:tinaddr;
WSAData:TWSAData;
begin
WSAStartup(2,WSAData);
HEnt:=gethostbyname(PChar(edit1.Text));
with ipaddr,hent^ do
begin
cIP:=format('%d.%d.%d.%d',[byte(h_addr^[0]),byte(h_addr^[1]),byte(h_addr^[2]),byte(h_addr^[3])]);
label1.caption:=cIP;
end;
end;
lovelymelon 2003-03-14
  • 打赏
  • 举报
回复
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;
procedure TForm1.Button4Click(Sender: TObject);
var
result:string;
begin
result:=localip;
showmessage('本机ip地址为: '+result);
end;
路人霆 2003-02-25
  • 打赏
  • 举报
回复
最简单的。
在DELPHI的Indy Misc控件中选取IdIPWatch。就可以了。它里面有一个函数可以显示本地IP。
//eg.----------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=IdIPWatch1.LocalIP;
end;
//----------------------------------------------
最好还是自己写代码吧。
laihecongxi 2003-02-25
  • 打赏
  • 举报
回复
Indy Misc面板IdIPWatch组件 设active为true;
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage(IdIPWatch1.LocalIP);
end;
即可。
dolemin 2003-02-25
  • 打赏
  • 举报
回复
我的E-mail是dlm_itj1978@163.com,谢谢!
linyingxu2002 2003-02-25
  • 打赏
  • 举报
回复
简单一点的:
function getIPs: TStrings;

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:=TStringList.Create;

Result.Clear;

GetHostName(Buffer,SizeOf(Buffer));

phe := GetHostByName(buffer);

if phe = nil then

begin

Exit;

end;

pPtr := PaPInAddr(phe^.h_addr_list);

I := 0;

while pPtr^[I] <> nil do

begin

Result.Add(inet_ntoa(pptr^[I]^));

Inc(I);

end;

WSACleanup;

end;
307 2003-02-25
  • 打赏
  • 举报
回复
你告诉我E-mail 我发一个例子工程给你看!
有问题请发信息到我的E-mail:guangbowang@163.com
dolemin 2003-02-25
  • 打赏
  • 举报
回复
to bluemeteor(挂月):第一段正确,第二段还没看懂,谢谢!
dolemin 2003-02-25
  • 打赏
  • 举报
回复
to xdf_hubei: LocalIPList从哪儿得来的?
to bluemeteor(挂月):研究中。。。
谢谢!
beata88 2003-02-25
  • 打赏
  • 举报
回复
up
xdf_hubei 2003-02-25
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
IpList:TStrings;
i:integer;
begin
IpList:=LocalIPList;
for i:=0 to IPlist.Count-1 do
begin
memo1.Lines.Add(iplist[i]);
end;
end;

单元
WSocket
bluemeteor 2003-02-25
  • 打赏
  • 举报
回复
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.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧