将某一主机域名解析为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;
使用 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;
解决方案 »
- 请教delphi删除临时表的问题
- 用了vclskin后,有一个button无法显示字
- 请教关于时间范围查询的语句。。。。在线等
- 已经三天了,还没有得到答案!!!!
- 请问如何把内存映射文件的内容修改并保存到原文件中
- 类型文件的保存问题
- 求一个PicShow for delphi2010稳定版本的VCL控件
- 请教DELPHI中的备份数据功能和还原数据功能的实现方式?
- 一个控件由三个Panel 组成底下一个上面两个,但是如何响应上面两个Panel 的OnClick事件呢? 就是如何写两个不同的Click
- 如何最小化后的图标???
- 在哪里有installshield下载? 安装完了installshield后,执行文件叫什么名字?
- delphi中提示“Grid index out of range”的错误信息,为什么?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, TB97,Winsock;type
TFormMain = class(TForm)
Label1: TLabel;
Label2: TLabel;
EditPresentation: TEdit97;
EditResult: TEdit97;
BtnGetHostByName: TToolbarButton97;
Label3: TLabel;
edtHost: TEdit97;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BtnGetHostByNameClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
FormMain: TFormMain;implementation{$R *.DFM}procedure TFormMain.FormCreate(Sender: TObject);
Var
WSAData:TWSAData;
begin
//initiates use of WS2_32.DLL
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
raise Exception.Create('Winsock Version Error');
end;procedure TFormMain.FormDestroy(Sender: TObject);
begin
WSACleanUP;
end;
procedure TFormMain.BtnGetHostByNameClick(Sender: TObject);
var
Host: pHostent;
ConsultResult:String;
Err:Integer;
begin
Try
Host := GetHostByName(PChar(EditPresentation.Text));
Except
Err:=WSAGetLastError();
EditResult.Text:='Error Code:'+InttoStr(Err);
Exit;
end;
if Host=NIL then
begin
EditResult.Text:='Host does not exist';
exit;
end;
ConsultResult:=Copy(Host.h_addr^,0,4);
EditResult.Text:=Format('%d.%d.%d.%d',
[ord(ConsultResult[1]),
ord(ConsultResult[2]),
ord(ConsultResult[3]),
ord(ConsultResult[4])]);
edtHost.Text:=Host.h_name;
end;end.
procedure TForm1.Button1Click(Sender: TObject);
var
wVersionRequested : WORD;
wsaData : TWSAData;
p : PHostEnt;
s : array[0..128] of char;
p2 : pchar;
begin
{Start up WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
{Get the computer name}
GetHostName(@s, 128);
p := GetHostByName(@s);{Get the IpAddress}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);edit1.text:=format('%s',[p2]);
end;