You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让TIdStackLocalAddress在Android平台正常工作?

本地IP获取:Indy10在Android平台的问题与解决思路

问题现象

基于Indy10编写的getLocalIP函数在Windows 10平台运行正常,能正确返回多个本地IP地址,示例输出如下:

No of Addresses: 4
  IPv4 Addresses:
  IP Address #0: 192.168.56.1 - 255.255.255.0 - 11
  IP Address #1: 192.168.1.7 - 255.255.255.0 - 8
  IP: 192.168.56.1

但切换到Android 64位平台(已连接局域网WiFi的三星S21)时,仅能返回本地回环IP,无其他有效结果,示例输出如下:

No of Addresses: 1
IPv4 Addresses:
IP Address #0: 127.0.0.1 -  - 0
IP: 127.0.0.1

问题原因

最初怀疑是权限缺失导致,但实际问题出在Indy10的GStack.GetLocalAddressList方法在Android平台存在缺陷,需采用Dave Nottage的修复方案来解决。

子网掩码获取补充

若需要获取Indy方法本该返回的子网掩码,可使用我提供的解决方案。

实现代码

function getLocalIP: string;
begin
  Result := '';
  try
    var IPList := TIdStackLocalAddressList.Create;
    try
      TIdStack.IncUsage;
      try
        GStack.GetLocalAddressList(IPList);
      finally
        TIdStack.DecUsage;
      end;

      WriteLog('DEBUG', 'No of Addresses: ' + IntToStr(IPList.Count));
      WriteLog('DEBUG', 'IPv4 Addresses:');

      var IPStrings := TStringList.Create;
      try
        for var i in IPList do
        begin
          if TIdStackLocalAddressIPv4(i).IPVersion = Id_IPv4 then
          begin
            IPStrings.Add(TIdStackLocalAddressIPv4(i).IPAddress + ' - ' + TIdStackLocalAddressIPv4(i).SubNetMask
              + ' - ' + TIdStackLocalAddressIPv4(i).InterfaceIndex.ToString);
          end;
        end;

        // show IP Addresses in the log file
        for var i := 0 to IPStrings.Count-1 do
          WriteLog('DEBUG', 'IP Address #' + IntToStr(i) + ': ' + IPStrings[i]);
        Result := IPStrings[0].Split([' - '])[0];
        WriteLog('DEBUG', 'IP: ' + Result);
      finally
        IPStrings.Free;
      end;
    finally
      IPList.Free;
    end;
  except
    On E: Exception do
    begin
      Result := '';
      WriteLog('ERROR', 'IP Error: ' + E.message);
    end;
  end;
end;

内容的提问来源于stack exchange,提问作者Terry Peterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:10:44