我想寫一顯示ip地址的程序.
使用timer控件,當得到當前的ip與上一個不同時則do something......
但如何讓程序知道當前的ip與上一個不一樣呢?
我是菜鳥,請大家指教.

解决方案 »

  1.   

    也就是當某些原因斷線了,再重新連線時,這時當前的動態ip不就與上一個不同了嗎?我要在這時侯do something....
      

  2.   

    可以这样:
    timer控件中搞个时间设定,比如多少秒,把当前的IP保存到一个数值中去
    时间片到了的时候读取当前的IP,然后跟存储的IP比较,就可以了
    而且可以不断的刷新存储中的IP,来反复比较
      

  3.   

    程序启动时取本机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;
      

  4.   

    temp =10秒前的IP值
    timer:
    if (temp=这时的IP)
       temp =这时的IP  
    else
       不等 do something...循环 timer
    再加上Delphi里面的一个取IP的控件,好做。
    但有一个问题,如果机器里面有多个IP,你会怎么比较呢??