Python套接字仅接受本地连接。

| 服务器:
import socket

host = \"\"
port = 4242
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
client, address = s.accept()
while 1:

    data = client.recv(size)
    if data:
        client.send(data)
        print(data.decode(\"utf-8\"))
客户:
import socket
import sys

host = sys.argv[1]
port = 4242
size = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
while True:
    line = input(\"What to say: \")
    s.send(line.encode(\"utf-8\"))
好吧,我在这里有点困惑。我开始学习套接字,因此我从一个简单的回显服务器开始。当服务器在Arch Linux或Ubuntu上运行时,我上面发布的代码可以很好地工作。但是,在Windows 7上时,它仅接受本地连接。问题是,我没有运行防火墙。我不确定Python是否具有单独的WinSock实现或其他实现,但是我很困惑!请,如果您愿意,我很清楚这是经过精心设计的(仅在客户端上接受!),但是我只是想知道为什么Windows不接受远程连接。 如果有帮助,在Arch和Ubuntu上,我运行的是Python 3.1,而在Win 7上运行的是3.2。
已邀请:
听起来好像
host=\'\'
默认绑定到Win 7下的本地主机(127.0.0.1)(目前我无法访问Win 7计算机)。 为了使您的服务器在主机上的所有(IPv4)接口上都可访问,这应该在Linux,Windows,Mac等操作系统上起作用:
host = \'0.0.0.0\'
s.bind((host, 8080))
要验证套接字绑定到哪个地址,可以执行以下操作:
>>> s.getsockname()
(\'0.0.0.0\', 8080)
作为Socket状态的文档: 由于对操作系统套接字进行了调用,因此某些行为可能取决于平台 蜜蜂。 我不熟悉Win32网络编程,但我可能会猜测,它可能是在创建套接字而不将其绑定到地址时触发的特定于实现的行为。 我的建议是提升抽象级别并使用SocketServer。

要回复问题请先登录注册