【问题标题】:Detecting local IP address under FireMonkey3在 FireMonkey3 下检测本地 IP 地址
【发布时间】:2013-12-13 13:48:21
【问题描述】:

需要在FireMonkey3下检测本地IP地址。在 VCL 版本中,我一直在使用单元 WinSock 及其方法

WSAStartup(...)
gethostname(...)

一个限制:不需要使用任何第三方库。我正在将 ASTA 组件移植到 FireMonkey3 平台,并且不想在组件之间做依赖。

【问题讨论】:

    标签: delphi firemonkey-fm3 wsastartup


    【解决方案1】:

    如果您需要跨平台解决方案,请尝试使用 Indy 和 IdStack 单元中包含的 TIdStack.AddLocalAddressesToList 方法

    试试这个示例

    var
      AAddresses: TStrings;
    begin
      AAddresses := TStringList.Create;
      try
        TIdStack.IncUsage;
        try
          GStack.AddLocalAddressesToList(AAddresses);
        finally
          TIdStack.DecUsage;
        end;
        if AAddresses.Count > 0 then
          //do something
      finally
        AAddresses.Free;
      end;
    end;
    

    【讨论】:

    • 如果您当时没有实例化任何 Indy 组件,则必须在使用前手动调用 TIdStack.IncUsage() 以确保 GStack 指针有效,然后在使用时调用 TIdStack.DecUsage()已经完成了。
    • @RemyLebeau 这个在 sdk 和移动设备上只为我返回 127.0.0.1 但我可以通过 wifi 访问网络...
    • @peimanF.: 你用的是安卓吗? AddLocalAddressesToList() 尚未在 Android 上实现,但应该可以在 iOS 上运行。
    • @RemyLebeau 是的,我正在使用 android.answer 提到 cross-platform。但是你对 android 有什么建议!?
    • @peimanF。您可能必须使用 Embarcadero 的 Android JNI Bridge 框架来直接访问 Android 的 Java API,特别是 NetworkInterface.getNetworkInterfaces()NetworkInterface.getInetAddresses() 方法,或 WifiManager.getConnectionInfo().getIpAddress() 方法。
    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 2013-10-02
    • 2011-02-08
    • 2014-11-20
    • 2017-12-05
    • 1970-01-01
    • 2015-01-14
    • 2022-01-25
    相关资源
    最近更新 更多