我有什么主机绑定侦听套接字?

时间:2010-05-27 06:55:27

标签: 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, 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。

然后程序将接受连接,但仅接受来自同一台机器上的连接。我需要做些什么来接受来自互联网的连接?

3 个答案:

答案 0 :(得分:8)

尝试0.0.0.0。这就是最常用的。

答案 1 :(得分:5)

第一个问题是你的除外块是吞咽错误而没有报告。第二个问题是您尝试绑定到特定接口,而不是INADDR_ANY。您可能绑定到“localhost”,它只接受来自本地计算机的连接。

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

假设您正在使用IPv4(即“常规互联网”),请复制socket module page上第一个示例中的套接字/绑定代码。

答案 2 :(得分:1)

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

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