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

macOS系统调用socket.gethostbyname(socket.gethostname())报错如何解决

macOS下socket.gethostbyname调用报错的解决方案

报错原因

该报错的核心是macOS系统默认没有将本机主机名映射到/etc/hosts文件的本地回环地址中,而Windows系统默认完成了该映射,因此同一段代码在Windows可以正常运行,在macOS会触发nodename nor servname provided错误。

解决方案

方案1:修改系统hosts配置(永久修复原代码运行问题)

  • 第一步:打开终端执行命令hostname,复制输出的当前主机名
  • 第二步:执行命令sudo vim /etc/hosts,输入开机密码后打开hosts配置文件
  • 第三步:分别在127.0.0.1和::1的配置行末尾追加刚才复制的主机名,修改后示例如下:
127.0.0.1       localhost your-host-name
::1             localhost your-host-name
  • 第四步:保存退出配置文件后,执行dscacheutil -flushcache刷新系统DNS缓存即可,原代码可正常运行

方案2:使用兼容性更好的IP获取代码(无需修改系统配置)

如果不想修改系统配置,可以替换原有写法,使用更稳定的跨平台IP获取逻辑,该逻辑在macOS、Windows、Linux下均能正常返回当前激活网卡的IPv4地址,不受VPN、多网卡场景影响:

import socket

def get_local_ip():
    test_conn = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        # 无需实际建立连接,仅用于获取当前网卡的对外IP
        test_conn.connect(("114.114.114.114", 80))
        local_ip = test_conn.getsockname()[0]
    except Exception:
        local_ip = "127.0.0.1"
    finally:
        test_conn.close()
    return local_ip

内容的提问来源于stack exchange,提问作者Naeem Khoshnevis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:09