Python 我必须将侦听套接字绑定到哪个主机?

Python 我必须将侦听套接字绑定到哪个主机?,python,networking,sockets,network-programming,Python,Networking,Sockets,Network Programming,我使用python的套接字模块,并尝试使用 import socket import sys def getServerSocket(host, port): for r in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE): af, socktype, proto, can

我使用python的套接字模块,并尝试使用

import socket
import sys

def getServerSocket(host, port):
    for r in socket.getaddrinfo(host, port, socket.AF_UNSPEC,
                                socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
        af, socktype, proto, canonname, sa = r
        try:
            s = socket.socket(af, socktype, proto)
        except socket.error, msg:
            s = None
            continue
        try:
            s.bind(sa)
            s.listen(1)
        except socket.error, msg:
            s.close()
            s = None
            continue
        break
    if s is None:
        print 'could not open socket'
        sys.exit(1)
    return s
其中主机为无,端口为15000


然后,程序将接受连接,但只接受来自同一台机器上的连接。我必须做什么才能接受来自internet的连接?

尝试0.0.0.0。这是最常用的。

您需要绑定到公共IP地址或“所有”地址(通常用“0.0.0.0”表示)


如果您试图通过网络访问它,您可能还需要考虑防火墙等。

第一个问题是,您的except块正在吞咽错误,而没有生成报告。第二个问题是,您试图绑定到一个特定的接口,而不是任何接口。您可能正在绑定到“localhost”,它将只接受来自本地计算机的连接

INADDR_ANY也称为常量0x00000000,但宏更有意义


假设您使用的是IPv4(也就是现在的“常规internet”),请从上的第一个示例复制套接字/绑定代码。

我该怎么做?我知道两台电脑都在不同的无线路由器后面。很难回答。首先尝试一下(这可能不是问题),但您需要找到如何配置涉及的每个设备。通常只有“服务器”端需要特别注意,因为默认情况下,传出的数据包通常不会被过滤。但服务器故障可能是一个更好的地方来获得答案。没有提到任何关于接口的内容。socket.INADDR\u是否会替换socket.AF\u unsec或socket.SOCK\u STREAM?在您的情况下,该接口由绑定到的地址暗示,即变量
sa
。引用该手册页面:“对于IPv4地址,接受两种特殊形式而不是主机地址:空字符串表示INADDR_ANY…”。调用
getaddrinfo
将返回一个地址列表,其中没有一个地址不存在。