当然是用程序。有什么想法也可以提
解决方案 »
- 问一个关于Socket API的问题
- 数组如何释放?
- fastreport自定义纸张大小的报表总是先过一页纸,怎样处理?
- 求助:光标在一个 Edit1 里,当我单击 enter 键,则 showmessage('ok'),这段程序要怎么写啊?
- how to assign a shortkey to a commandbarbutton?
- 如何设置Tchart控件来显示数据值?
- 关于BDE 的DBASE的LANGUAGE DRIVER(语言驱动)
- 如何在Delphi中动态修改注册表域用户的权限?
- delphi调用vc dll 怎样取返回的指针记录类型中的值
- delphi 7 经常卡死问题,高手来SHOW两招吧!!
- 高难问题
- 50分寻求一条UPDATE语句,先祝大家圣诞快乐,拜个早年,不会又是没人来回答我的问题吧。
还有什么办法吗?
另外,即使是写DLL,也可以用控件的,控件不过就是一个类罢了,没有什么特殊的地方。
uses
....,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;
procedure TForm1.Button1Click(Sender: TObject);
var
IP: string;
DNS: string;
begin
DNS := InputBox('输入DNS域名', '主机名称:', '');
if HostToIp(DNS, IP) then showmessage(IP);
end;
dll也可以加控件啊,甚至窗体将某一主机域名解析为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;
域名解析就是要慢。我的程序没有办法容忍。
我的程序装在服务器上,一般一个网吧至少有60田电脑
多的200-300台,每个电脑算开10个网页,每个网页都有这样的请求
我的Dll都要处理,那服务器只有死了。我还是老实一点多用一个字段记录
网站的Ip,然后往列表里面多加入一个网站。
而且使用代码生成TIdDNSResolver也不难
如果用数据库表存储ip,及时更新还是个问题