如何探測ip address?? 我想寫一顯示ip地址的程序.使用timer控件,當得到當前的ip與上一個不同時則do something......但如何讓程序知道當前的ip與上一個不一樣呢?我是菜鳥,請大家指教. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 也就是當某些原因斷線了,再重新連線時,這時當前的動態ip不就與上一個不同了嗎?我要在這時侯do something.... 可以这样:timer控件中搞个时间设定,比如多少秒,把当前的IP保存到一个数值中去时间片到了的时候读取当前的IP,然后跟存储的IP比较,就可以了而且可以不断的刷新存储中的IP,来反复比较 程序启动时取本机IP地址保存,然后定时取本机IP地址比较即可。取本机IP地址(单IP地址):procedure GetLocalIPAndHostName(var LocalIP,LocalHostName:string);type pu_long = ^u_long;var varTWSAData : TWSAData; varPHostEnt : PHostEnt; varTInAddr : TInAddr; namebuf : Array[0..255] of char; fd : integer; rc : integer;begin rc := WSAStartup($101,varTWSAData); if rc <> 0 then raise ESockUtilErr.CreateFmt( 'WSA启动错误: %d',[rc] ) else begin gethostname(namebuf,sizeof(namebuf)); LocalHostName := PChar(@namebuf); varPHostEnt := gethostbyname(namebuf); varTInAddr.S_addr := u_long(pu_long(varPHostEnt^.h_addr_list^)^); LocalIP := inet_ntoa(varTInAddr); end; fd := WinSock.Socket( PF_INET, SOCK_STREAM, 0 ); if fd = INVALID_SOCKET then raise ESockUtilErr.CreateFmt( '%d %d: 无效 socket',[fd,WSAGetLastError] ); WSACleanup;end; temp =10秒前的IP值timer:if (temp=这时的IP) temp =这时的IP else 不等 do something...循环 timer再加上Delphi里面的一个取IP的控件,好做。但有一个问题,如果机器里面有多个IP,你会怎么比较呢?? 如何用SQL-DMO来判断SQLSERVER运行状态? 如何处理Twebbrowser里弹出的对话框 线程简单语法 怎样实现函数重载?子类中怎样调用基类的重载函数? 我用delphi7写的软件,在一个win2000的机器上无法正常使用 combobox的用法 Exception 怎样捕获错误号? 学渣求助 考研论!!! 实现电脑上输入电话号码,直接拨号 急! 在Delphi 6中编写生成Word文档? 如何用DELPHI来获得网卡的MAC地址?
timer控件中搞个时间设定,比如多少秒,把当前的IP保存到一个数值中去
时间片到了的时候读取当前的IP,然后跟存储的IP比较,就可以了
而且可以不断的刷新存储中的IP,来反复比较
取本机IP地址(单IP地址):
procedure GetLocalIPAndHostName(var LocalIP,LocalHostName:string);
type
pu_long = ^u_long;
var
varTWSAData : TWSAData;
varPHostEnt : PHostEnt;
varTInAddr : TInAddr;
namebuf : Array[0..255] of char;
fd : integer;
rc : integer;
begin
rc := WSAStartup($101,varTWSAData);
if rc <> 0 then
raise ESockUtilErr.CreateFmt( 'WSA启动错误: %d',[rc] )
else
begin
gethostname(namebuf,sizeof(namebuf));
LocalHostName := PChar(@namebuf);
varPHostEnt := gethostbyname(namebuf);
varTInAddr.S_addr := u_long(pu_long(varPHostEnt^.h_addr_list^)^);
LocalIP := inet_ntoa(varTInAddr);
end;
fd := WinSock.Socket( PF_INET, SOCK_STREAM, 0 );
if fd = INVALID_SOCKET then
raise ESockUtilErr.CreateFmt( '%d %d: 无效 socket',[fd,WSAGetLastError] );
WSACleanup;
end;
timer:
if (temp=这时的IP)
temp =这时的IP
else
不等 do something...循环 timer
再加上Delphi里面的一个取IP的控件,好做。
但有一个问题,如果机器里面有多个IP,你会怎么比较呢??