Python:getaddrinfo和gethostbyname不返回端口号

0 投票
1 回答
673 浏览
提问于 2025-04-18 12:25

我把Python 2.7.1嵌入到一个基于C++的应用程序里(叫做marmalade)

我运行了这个例子,来自于这里: https://docs.python.org/2/library/socket.html

输入

import socket
socket.getaddrinfo("www.python.org", 80, 0, 0, socket.SOL_TCP)

返回

[(2, 3, 3, '', ('23.235.47.175', 0))]

DEBUG:
SOCKET: s3eInetAton: 'www.python.org'
SOCKET: s3eInetLookup: 'www.python.org'
SOCKET: s3eInetLookup (synchronous): done DNS: '23.235.47.175:0'
IWCRT: gethostbyname www.python.org -> 4a700360

不过应该是这样的,端口不等于零

[(2, 1, 6, '', ('xx.xx.xx.xx', 80)]

getaddrinfo也是一样:

输入

import sys, socket

result = socket.getaddrinfo("python.org", None, 0, socket.SOCK_STREAM)

for item in result:
    print (item[4])

返回

('140.211.10.69', 0)

('xx.xx.xx.xx', 80)

还是没有端口


  • 我在家目录外运行了这个脚本
  • 我仔细检查了pyconfig.h,看看有没有缺少的设置(我没发现)
  • 我搜索了一些常见的Python socket设置,但找不到(你会觉得这很简单)

有没有什么想法可能导致这个问题?

1 个回答

0

我觉得 getaddrinfo() 或 gethostbyname() 这两个函数不会返回端口号和 IP 地址。你可以查看这个链接 getaddrinfo() 和 RFC-2553 来了解更多信息。

撰写回答