如何得到本机器的计算机名和IP????

maggie907 2002-05-14 04:07:23
如何得到本机器的计算机名和IP????
...全文
24 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
macro_love 2002-05-14
  • 打赏
  • 举报
回复
在引用单元用uses winsock
然后放两个edit 和一个button
procedure TForm1.Button1Click(Sender: TObject);
var
ip:string;
ipstr:string;
buffer:Array[1..32] of char;
i:integer;
WSData:TWSAData;
host:PHostEnt;
begin
if WSAstartup(2,WSData)<>0 then
begin
showmessage('WS2_32.dll初始化失败');
halt;
end;
GetHostName(@Buffer[1],32);
host:=GetHostByName(@Buffer[1]);
edit1.Text:=host.h_name;
for i:=1 to 4 do
begin
ip:=IntToStr(ord(host.h_addr^[i-1]));//得到分段IP
Ipstr:=Ipstr+ip;
if i<4 then
ipstr:=ipstr+'.'
else
edit2.Text:=ipstr;
end;
WSACleanup;
end;
rwdx 2002-05-14
  • 打赏
  • 举报
回复
var
p_c:array[1..48] of char;
WSData:TWSAData;
Host:PHostEnt;
begin
try
WSAstartup(2,WSData);
gethostname(@p_c[1],48);
host:=gethostbyname(@p_c[1]);
with host^ do
p_computer:= Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
p_computer:='Name:'+host.h_name+' IP:'+p_computer;
except
end;
end;
bianlx 2002-05-14
  • 打赏
  • 举报
回复
本机器的计算机名可以通过getcomputername函数来获取
Billy_Chen28 2002-05-14
  • 打赏
  • 举报
回复
解析IP地址为主机名。

使用 WinSock 单元;
过程如下:
function IPAddrToName(IPAddr : String): String;
var
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
WSAData: TWSAData;
begin
WSAStartup($101, WSAData);
SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));
HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
if HostEnt<>nil then
begin
result:=StrPas(Hostent^.h_name)
end
else
begin
result:='';
end;
end;


测试时请在在线状态。

测试代码:
var
Name: string;
begin
Name := InputBox('输入对方主机IP', '主机IP地址:', '');
showmessage(IpAddrToName(Name));

end;
Billy_Chen28 2002-05-14
  • 打赏
  • 举报
回复
取得本机IP:
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,939

社区成员

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

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