得本机器IP地址(100分)

  • 主题发起人 vividwang
  • 开始时间
有那样复杂吗????各位!
我来!
uses winsock;

var s,ls:integer;
var address:sockaddr_in;
begin
getpeername(s,address,ls);
showmessage(inet_ntoa(address.sin_addr));//局域网主机的外部IP
showmessage(inttostr(ntohs(address.sin_port)));//端口
 
楼上的我用你的代码做了实验,给出的地址是德国的,你是不是在检查一下
 
我也要一份
planetike@163.com
 
看来没结果,结了吧
 
楼主的问题似乎没有什么价值,不知道要用在什么地方.
如果你想知道你本机所有网络接口的地址,那么有很多方法。
如果你想知道你的网关地址,去查本机的网络设置。
如果你想把你的地址通知其他机器,不必要,因为连接的另一端会检查出你的地址,你的地址有2种情况,1-如果你的局域网出口作了NAT,那么对端得到的是你的网关地址;2-如果出口没有做NAT,对端将得到你的本机地址。
 
没有找到一个好的解决方式。。。
 
{* 获取本机的IP地址}
function TNet.GetLocalIP: string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do begin
result:=StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
end;
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
669
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部