如何获得本机ip ( 积分: 50 )

  • 主题发起人 主题发起人 可爱小猪
  • 开始时间 开始时间

可爱小猪

Unregistered / Unconfirmed
GUEST, unregistred user!
在udp数据发送完成时
我想知道我是用哪个ip发送数据的
请问如何获得
 
在udp数据发送完成时
我想知道我是用哪个ip发送数据的
请问如何获得
 
//获取本机的IP地址
uses WinSock;
function LocalIP : 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;
 
这个是获得一台计算机的所有ip的函数
获得的是所有设置的ip
谢谢了
 
速度还真快哈!
 
很一般了
 
uses winsock;

function GetDynIP(HostName: string = ''): string;
type
TaPInAddr = Array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
IP: string;
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
IP := '0.0.0.0';
if HostName = '' then
GetHostName(Buffer, SizeOf(Buffer))
else
StrPCopy(Buffer, HostName);
phe := GetHostByName(buffer);
if phe = nil then
begin
Result := IP;
Exit;
end;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^ <> nil do
begin
IP := inet_ntoa(pptr^^);
Inc(I);
end;
WSACleanup;
Result := IP; //如果上网则为上网ip否则是网卡ip
end;
 
这个也不对
如果我有两张网卡
都能上网
那我用的是那一个呢
 
大家快发言啊
人都到那里去了
 
楼上给的代码可以查出拨号上网用户的IP,但如果采用的是静态路由方式上的网,IP可不正确,将会是192.168.1.6。。。。
 
哪个会的
只是有这个想法而已
大家帮帮忙了
 
这么多,上网的是哪个啊
如果有两张都上,是那一个啊
 
function GetLocalIP(var LocalIp: string): Boolean;

var

HostEnt: PHostEnt;

Ip: string;

addr: pchar;

Buffer: array [0..63] of char;

GInitData: TWSADATA;

begin

Result := False;

try

WSAStartup(2, GInitData);

GetHostName(Buffer, SizeOf(Buffer));

HostEnt := GetHostByName(buffer);

if HostEnt = nil then Exit;

addr := HostEnt^.h_addr_list^;

ip := Format('%d.%d.%d.%d', [byte(addr [0]),

byte (addr [1]), byte (addr [2]), byte (addr [3])]);

LocalIp := Ip;

Result := True;

finally

WSACleanup;

end;

end;
 
上面都有了[:(]
 
呵呵,结贴吧。 用GETHOSTBYNAME就可以找到,如果有多个IP也能找到的。
 
那个得到的是好多个
如何是分出上网的是那一个啊
你自己试试咯
 
用UDP很简单啊,给别人发的同时,也给你自己发一个数据包,然后根据自己发来的数据包就知道发送的IP了。
呵呵,以上答案未经测试。
 
如果不用程序辨别,可以直接用cmd命令解决滴。。
进“运行”-->“cmd”---->"IPConfig"
显示的最后一个就是当前上网用的IP。。。
 
用udp 的有个问题就是经过nat转换过的就不是本地ip 了
是你用的外网的哪个映射的端口
用哪个命令得到的也是很多ip
好象不是最后一个是上网ip吧
 
如果是用indy组件的,可以使用下面的代码:

IdUDPClient1.Send('Test');
// 发送后处理
with IdUDPClient1.Binding do begin
UpdateBindingLocal;
ClientIP := IP;
ClientPort := Port;
end;

如果不是用indy组件,可以自己去看indy的源码。
 
后退
顶部