• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

TwoWaysinDelphitoGetIPAddressonAndroid

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1. Via NDK

Refer Delphi Call getifaddrs and freeifaddrs on Android

uses Posix.Ifaddrs, Posix.SysSocket, Posix.ArpaInet, Posix.NetinetIn;

var
  FPifaddrs: Pifaddrs;
  FPin_addr: Pointer;
  Fsa_family: sa_family_t;
  FPtrWrapper: TPtrWrapper;
begin
  getifaddrs(FPifaddrs);
  FPtrWrapper := TMarshal.AllocMem(INET6_ADDRSTRLEN);
  while FPifaddrs <> Nil do
  begin
    Fsa_family := FPifaddrs.ifa_addr.sa_family;
    if (Fsa_family = AF_INET) or (Fsa_family = AF_INET6) then
    begin
      if Fsa_family = AF_INET then
        FPin_addr := @Psockaddr_in(FPifaddrs.ifa_addr).sin_addr
      else
        FPin_addr := @Psockaddr_in6(FPifaddrs.ifa_addr).sin6_addr;
      inet_ntop(Fsa_family, FPin_addr, FPtrWrapper.ToPointer, INET6_ADDRSTRLEN);
      Writeln(TMarshal.ReadStringAsAnsi(FPtrWrapper));
    end;
    FPifaddrs := FPifaddrs.ifa_next;
  end;
  TMarshal.FreeMem(FPtrWrapper);
end;

 

2. Via JNI

uses Androidapi.JNI.Net, Androidapi.JNI.Java.Net, Androidapi.JNI.JavaTypes,
  Androidapi.Helpers;

var
  FJEnumOfNet: JEnumeration;
  FJNet: JNetworkInterface;
  FJEnumOfAddr: JEnumeration;
  FJAddr: JInetAddress;
begin
  FJEnumOfNet := TJNetworkInterface.JavaClass.getNetworkInterfaces;
  while FJEnumOfNet.hasMoreElements do
  begin
    FJNet := TJNetworkInterface.Wrap(FJEnumOfNet.nextElement);
    FJEnumOfAddr := FJNet.getInetAddresses;
    while FJEnumOfAddr.hasMoreElements do
    begin
      FJAddr := TJInetAddress.Wrap(FJEnumOfAddr.nextElement);
      Writeln(JStringToString(FJAddr.getHostAddress.toString));
    end;
  end;
end;

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi判断全角字符方法发布时间:2022-07-18
下一篇:
文件夹查找文件(一个文件夹文件查找函数Delphi)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap