在局域网内实现IP与主机名的转换,
给定主机名测试出其IP
给定主机名测试出其IP
解决方案 »
- 请教一个构造函数的问题
- 拦截一个unit类型的消息,查看值为66592,请问这是什么消息
- ListView数据刷新问题
- 如何编写程序跟踪计算机用户曾经打开的程序?
- 奇怪问题,谁碰过???-------在线求救!!!
- 请帮忙,dbgrid中如何触发一个具体字段的事件???谢了.........
- 有几个问题,请高手指点!!!!1111
- @@@@@兄弟们,救命!为什么在读取ORACLE表索引时,无论是否为主索引,均显示为否。进来有分。@@@@@
- 请版主保留一天
- 请问怎样在自己的程序里面更改别的程序的菜单,如改记事本的菜单。
- [email protected]我是西安的一名程序员(Delphi数据库开发)愿意交流者将我加入联系人
- 如何给DBGRID增加这样的列?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,Winsock;type
TFormMain = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
EditPresentation: TEdit;
EditResult: TEdit;
edtHost: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(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.Button1Click(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.
USES
WinSock;
.....
private
hAsyncTaskHandle: THandle;
procedure WMRESOLVED(var msg:TMSG);
.....
var
buff: HOSTENT;
.....
begin
hAsyncTaskHandle := WSAAsyncGetHostByName(Handle, WM_RESOLVED,
PChar(<域名>),PChar(@buff),
MAXGETHOSTSTRUCT);
end;
procedure TForm1.WMRESOLVED(var msg: TMSG)
begin
if buf.h_addr = nil then
<出错>
else
begin
<主机名> := buff.h_name;
<IP> := Format('%d.%d.%d.%d',
[ord(ConsultResult[1]), ord(ConsultResult[2]),
ord(ConsultResult[3]),ord(ConsultResult[4])]);
end;
end;
.....
如果等待时间过长可用 WSACancelAsyncRequest(hAsyncTaskHandle); 中断解析。
USES
WinSock;
const
WM_RESOLVED = WM_USER + 1001;
.....
private
hAsyncTaskHandle: THandle;
procedure WMRESOLVED(var msg:TMSG); message WM_RESOLVED;
.....
var
buff: HOSTENT;
.....
begin
hAsyncTaskHandle := WSAAsyncGetHostByName(Handle, WM_RESOLVED,
PChar(<域名>),PChar(@buff),
MAXGETHOSTSTRUCT);
end;
procedure TForm1.WMRESOLVED(var msg: TMSG)
begin
if buf.h_addr = nil then
<出错>
else
begin
<主机名> := buff.h_name;
<IP> := Format('%d.%d.%d.%d',
[ord(ConsultResult[1]), ord(ConsultResult[2]),
ord(ConsultResult[3]),ord(ConsultResult[4])]);
end;
end;
.....
如果等待时间过长可用 WSACancelAsyncRequest(hAsyncTaskHandle); 中断解析。
刚才写的有点错,不好意思。