取得本机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.
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.
解决方案 »
- 一個控件的問題--在線等
- 为什么现在文章无法收藏?
- 一个只能下载文件的web服务器
- 声音文件的格式问题??
- 如何用编程的方法清除 IE 的Form AutoComplete List和Saved username and password by IE
- 是不是只有用DBGRID,DBTEXT等类似的组件连接数据库时,更该信息才能用APPLYUPDATES?
- 关于DLL
- 给点建议,要准备找工作了。谢谢!
- 在线等待 treeview 和listview中如何设置某个节点可写
- 在stringgrid中怎样让显示的文字在中间,而不是靠左?-----一个简单问题。呵呵
- 关于用友财务软件
- 一个插入SQL+控件插入的问题?
过程如下:
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;
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;
然后放两个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;