D
Delphi On Me
Unregistered / Unconfirmed
GUEST, unregistred user!
拨号上网时,或者安装有多个网卡时,一台机器会对应多个IP地址,
这时如果想知道与某一个目标地址通信所用的本地IP地址,该怎么写代
码?
我自己写了一段,要求是用UDP传输,如下:
hsk := socket(AF_INET, SOCK_DGRAM, 0);
if hsk <> -1 then
begin
sdr.sin_addr.s_addr := INADDR_ANY;
sdr.sin_family := AF_INET;
sdr.sin_port := 0;
size := sizeof(sdr);
if bind(hsk, sdr, size) >= 0 then
begin
sdr.sin_family := AF_INET;
sdr.sin_port := htons(5000);
sdr.sin_addr.S_addr := inet_addr(PChar('192.168.26.111'));
size := sizeof(sdr);
if connect(hsk, sdr, size) <> -1 then
begin
size := sizeof(sdr);
sdr.sin_family := AF_INET;
if getsockname(hsk,sdr,size)>=0 then
begin
IP := Strpas(inet_ntoa(sdr.sin_addr));
Port := ntohs(sdr.sin_port);
closesocket(hsk);
end;
end;
end;
end;
但是得到的IP是'0.0.0.0',不知道哪儿写错了,麻烦各位指点一下。
这时如果想知道与某一个目标地址通信所用的本地IP地址,该怎么写代
码?
我自己写了一段,要求是用UDP传输,如下:
hsk := socket(AF_INET, SOCK_DGRAM, 0);
if hsk <> -1 then
begin
sdr.sin_addr.s_addr := INADDR_ANY;
sdr.sin_family := AF_INET;
sdr.sin_port := 0;
size := sizeof(sdr);
if bind(hsk, sdr, size) >= 0 then
begin
sdr.sin_family := AF_INET;
sdr.sin_port := htons(5000);
sdr.sin_addr.S_addr := inet_addr(PChar('192.168.26.111'));
size := sizeof(sdr);
if connect(hsk, sdr, size) <> -1 then
begin
size := sizeof(sdr);
sdr.sin_family := AF_INET;
if getsockname(hsk,sdr,size)>=0 then
begin
IP := Strpas(inet_ntoa(sdr.sin_addr));
Port := ntohs(sdr.sin_port);
closesocket(hsk);
end;
end;
end;
end;
但是得到的IP是'0.0.0.0',不知道哪儿写错了,麻烦各位指点一下。