• 刚写好的读取多网卡IP地址的函数


    虽然现在一机多网卡已经很普遍(像Notebook带有线、无线、蓝芽等),但是找一个现成的能够一次过读出所有网卡IP地址的函数实在是难,无奈自己写了一个,好东西谁用谁知道。

    [c-sharp] view plain copy
     
    1. //uses WinSock;  
    2. type  
    3.   PAddrInfoW = ^ADDRINFOW;  
    4.   ADDRINFOW = record  
    5.     ai_flags        : Integer;      // AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST  
    6.     ai_family       : Integer;      // PF_xxx  
    7.     ai_socktype     : Integer;      // SOCK_xxx  
    8.     ai_protocol     : Integer;      // 0 or IPPROTO_xxx for IPv4 and IPv6  
    9.     ai_addrlen      : ULONG;        // Length of ai_addr  
    10.     ai_canonname    : PWideChar;    // Canonical name for nodename  
    11.     ai_addr         : PSOCKADDR;    // Binary address  
    12.     ai_next         : PAddrInfoW;   // Next structure in linked list  
    13.   end;  
    14.   PPaddrinfoW = ^PAddrInfoW;  
    15.   TAddrInfoW = ADDRINFOW;  
    16.   
    17. function GetAddrInfoW(NodeName: PWideChar; ServiceName: PWideChar; Hints: PaddrinfoW; ppResult: PPaddrinfoW): Integer; stdcall; external 'WS2_32.DLL' name 'GetAddrInfoW';  
    18. procedure FreeAddrInfoW(ai: PaddrinfoW); stdcall; stdcall; external 'WS2_32.DLL' name 'FreeAddrInfoW';  
    19.   
    20. procedure GetIPList(List: TStrings);  
    21. var  
    22.     Buffer: array[0..63] of AnsiChar;  
    23.     Hostname: string;  
    24.     Hints: TAddrInfoW;  
    25.     LAddrInfo: pAddrInfoW;  
    26.     RetVal: Integer;  
    27.     GInitData: TWSADATA;  
    28. begin  
    29.     WSAStartup($101, GInitData);  
    30.     GetHostName(Buffer, SizeOf(Buffer));  
    31.     Hostname := string(Buffer);  
    32.     ZeroMemory(@Hints, SizeOf(TAddrInfoW));  
    33.     Hints.ai_family := 2{AF_INET};  
    34.     Hints.ai_socktype := 1{SOCK_STREAM};  
    35.     LAddrInfo := nil;  
    36.     RetVal := GetAddrInfoW(PChar(Hostname), nil, @Hints, @LAddrInfo);  
    37.     try  
    38.         if (RetVal = 0) and (LAddrInfo <> nil) then  
    39.             repeat  
    40.                 with TInAddr(LAddrInfo^.ai_addr^.sin_addr).S_un_b do  
    41.                     List.Add(Format('%d.%d.%d.%d', [Byte(s_b1), Byte(s_b2), Byte(s_b3), Byte(s_b4)]));  
    42.                 LAddrInfo := LAddrInfo^.ai_next;  
    43.             until LAddrInfo = nil;  
    44.     finally  
    45.         FreeAddrInfoW(LAddrInfo);  
    46.         WSACleanup;  
    47.     end;  
    48. end;  

    PS:我用D2009,用低版本D的朋友麻烦自己改改了。

    http://blog.csdn.net/nhconch/article/details/4897682

  • 相关阅读:
    Java第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
    java第三次实验
    java 第二次实验
  • 原文地址:https://www.cnblogs.com/findumars/p/5393703.html
Copyright © 2020-2023  润新知