刚学网络编程,试着做了一个获取本机的名及地址的方法,开始怎么也获取的不对,原来错误在这里
i:=longint(pointer(p^.h_addr_list^)^); 这句开始少了 pointer 了,因为 h_addr_list 本来就是一个指针 ^pchar,所以取得了这个指针的值后再去获取这个指针所指向的内容
不管代码好不好吧,反正能获取 ip 了
procedure TForm1.Button1Click(Sender: TObject);
var
s:pchar;
name:string;
ip:string;
p:phostent;
i:longint;
begin
//getmem(s,254);
//winsock.gethostname(s,strlen(s));
setlength(name,254);
winsock.gethostname(pchar(name),254);
//name:=sysutils.StrPas(s);
setlength(name,strlen(pchar(name)));
showmessage(name);
p:=winsock.gethostbyname(pchar(name));
i:=longint(pointer(p^.h_addr_list^)^);
s:=winsock.inet_ntoa(tinaddr(i));
memo1.Lines.add(strpas(p^.h_name));
memo1.lines.Add(string(s));
// freemem(s);
end;