|
发表于 2013-6-8 16:28:34
|
显示全部楼层
//此段代码在win7 和 ubuntu 11.04均可正常编译
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
{$IFDEF linux}
netdb, Sockets
{$ELSE}
Windows, Winsock
{$ENDIF}
;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
{$IFDEF linux}
procedure TForm1.Button1Click(Sender: TObject);
var
he: THostEntry;
i: Integer;
s: string;
begin
if not ResolveHostByName(Edit1.Text, he) then Exit;
s:= IntToStr(he.Addr.s_bytes[1]) + '.'
+ IntToStr(he.Addr.s_bytes[2]) + '.'
+ IntToStr(he.Addr.s_bytes[3]) + '.'
+ IntToStr(he.Addr.s_bytes[4]);
Edit2.Text:= s;
end;
{$ELSE}
function HostNameToIpAddress(AHostName: String): String;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
begin
result:='';
WSAStartup(2, WSAData);
HostEnt := gethostbyname(PChar(AHostName));
if HostEnt <> nil then
begin
with HostEnt^ do
result:= Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
end;
WSACleanup;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text:= HostNameToIpAddress(Edit1.Text);
end;
{$ENDIF}
end.
|
|