如何解析IP地址(50分)

  • 主题发起人 主题发起人 liguang
  • 开始时间 开始时间
L

liguang

Unregistered / Unconfirmed
GUEST, unregistred user!
同题如何解析IP地址。
小弟几日移植了一个实现解析IP地址功能的BCB程序到DELPHI。但是移植后的代码在执行时却产生错误,不知道是为什么?
procedure TForm1.ToolButton9Click(Sender: TObject);
label
return;
var
wv:WORD;
ws:WSADATA;
err:integer;
hostname:PHostEnt;
i:in_addr;
ptr:PChar;
ip:array[0..50] of char;
begin
wv:=MAKEWORD(2,0);
err:=WSAStartup(wv,ws);
if (err<>0) and ((LOBYTE(ws.wVersion)<>2) or (HIBYTE(ws.wVersion)<>0)) then
begin
MessageBox(Handle,'没有满足要求的WINSOCK.DLL','出错信息',MB_OK+MB_ICONERROR);
goto return;
end;
hostname:=gethostbyname(PChar(ComboBox1.Text));
if hostname=nil then
begin
MessageBox(Handle,'创建Socket出错!','出错信息',MB_OK+MB_ICONERROR);
goto return;
end;
LongInt(i):=0;
i.s_addr:=LongInt((hostname^.h_addr_list^)^);
ptr:=inet_ntoa(i);
if ptr=nil then
begin
MessageBox(Handle,'解析IP地址时出错!','出错信息',MB_OK+MB_ICONERROR);
goto return;
end;
StrCopy(ip,ptr);
ComboBox1.Text:=ip;
return:
WSACLeanup;
end;
得分条件:
1。修改上面代码中的错误。
2。给出自己的代码。
总之只要能实现这功能便给分(先到先给哟!)。
 
function GetIP(Name:string) : string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe :PHostEnt;
pptr : PaPInAddr;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := '';
phe :=GetHostByName(pchar(Name));
pptr := PaPInAddr(Phe^.h_addr_list);
result:=StrPas(inet_ntoa(pptr^[0]^));
WSACleanup;
end;
 
with hostname^do
ComboBox1.Text := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]),
Byte(h_addr^[2]), Byte(h_addr^[3])]);
 
o*o你的答案很好,但是还有一个问题我想知道,如何进行IP-域名的转换。如果你有
回答我愿意再加50分。谢谢!
 
接受答案了.
 
后退
顶部