给你2个例子: 1.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; 2. ....... ....... var FormMain: TFormMain; buf:HOSTENT; hAsyncTaskHandle:THandle; implementation{$R *.DFM} procedure TFormMain.WMRESOLVED(var Msg:TWMRESOLVED); begin if buf.h_addr=NIL then Begin EditResult.Text:='Failed to resolve'; exit; end; EditResult.Text:=Format('%d.%d.%d.%d', [ord( buf.h_addr^[0]), ord(buf.h_addr^[1]), ord(buf.h_addr^[2]), ord(buf.h_addr^[3])]); edtHost.Text:=buf.h_name; end; 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.BtnWSAAsyncGetHostByNameClick(Sender: TObject);begin hAsyncTaskHandle:=WSAAsyncGetHostByName(Handle,WM_RESOLVED,pchar(EditPresentation.Text),pchar(@buf),MAXGETHOSTSTRUCT); end;procedure TFormMain.BtnWSACancelAsyncRequestClick(Sender: TObject); begin WSACancelAsyncRequest(hAsyncTaskHandle); end;
不行吧~~~~他的意思好像是用户已经在一台机器上使用自己的ID登录了~~在到别的机器上登陆~~如果Drop掉~~最开始的机器上不就不行了??
1.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;
2.
.......
.......
var
FormMain: TFormMain;
buf:HOSTENT;
hAsyncTaskHandle:THandle;
implementation{$R *.DFM}
procedure TFormMain.WMRESOLVED(var Msg:TWMRESOLVED);
begin
if buf.h_addr=NIL then
Begin
EditResult.Text:='Failed to resolve';
exit;
end;
EditResult.Text:=Format('%d.%d.%d.%d',
[ord( buf.h_addr^[0]),
ord(buf.h_addr^[1]),
ord(buf.h_addr^[2]),
ord(buf.h_addr^[3])]); edtHost.Text:=buf.h_name;
end;
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.BtnWSAAsyncGetHostByNameClick(Sender: TObject);begin
hAsyncTaskHandle:=WSAAsyncGetHostByName(Handle,WM_RESOLVED,pchar(EditPresentation.Text),pchar(@buf),MAXGETHOSTSTRUCT);
end;procedure TFormMain.BtnWSACancelAsyncRequestClick(Sender: TObject);
begin
WSACancelAsyncRequest(hAsyncTaskHandle);
end;