[请教]能否用DELPHI实现将域名转换成IP?在线等ing... (100分)

  • 主题发起人 主题发起人 Roadsign
  • 开始时间 开始时间
R

Roadsign

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大虾~在DELPHI中能否实现将域名转换成IP?

比如在edit1.text中输入www.sina.com,然后响应Btn1.click转换成相应的IP,显示在Label1.caption~

该怎么做?小弟已经在全文检索里翻腾半天了~不过没找到~请各位大虾指教~谢谢谢谢~

在线等ing...
 
如果这个问题解决了,那我的问题也间接解决
:)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2515367
 
uses WinSock;

function SvrNameToIP(const SvrName: string): string;
type
PPInAddr = ^PInAddr;
var
phe: PHostEnt;
pp: PPInAddr;
GInitData: TWSADATA;
begin
WSAStartup($101, GInitData);
Result := '';

phe := GetHostByName(PChar(SvrName));

if phe = nil then
Exit;

pp := PPInAddr(phe^.h_addr_list);
if pp^ <> nil then
Result := StrPas(inet_ntoa(pp^^));

WSACleanup;
end;

 
很简单 生成一个批处理 里面使用命令 ping WWW.SINA.COM > 1.TXT
运行这个批处理文件 然后分析 1.TXT 你就知道 地址了。
 
晕~偶刚找着~瀑布寒……
看来这个问题还是被关注过滴~厚厚~~

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1371858
 
procedure TForm1.Button1Click(Sender: TObject);
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
i: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
phe := GetHostByName(PChar(Edit1.Text));
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
i := 0;
while pPtr^ <> nil do
begin
Memo1.Lines.Add(PChar(inet_ntoa(pptr^^)));
Inc(i);
end;
WSACleanup;
end;
 
to mstar:
偶们要一门心思用DELPHI啊~厚厚~~
批处理偶早想过了~只是觉得不甘心~偶觉得DELPHI应该可以解决一切问题滴~~[:D]
 
将某一主机域名解析为IP地址。
使用 WinSock 单元;
过程如下:
function HostToIP(Name: string; var Ip: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then
if Assigned (hostEnt^.h_addr_list) then begin
addr := hostEnt^.h_addr_list^;
if Assigned (addr) then begin
IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end
end;



测试时请在在线状态。

测试代码:
var
IP: string;
DNS: string;
begin
DNS := InputBox('输入DNS域名', '主机名称:', '');
if HostToIp(DNS, IP) then showmessage(IP);
end;
作者:Latfi Baran

我测试Kingron给出的用法时,hostEnt老是=nil。
后来我在用gethostbyname(...)之前,加入WSAStartup(...),终于一切OK。
Winsock单元中没有getaddressbyname()
别人的一点资料,你看看吧
 
结贴喽~谢谢大家~
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部