Python套接字只接受本地连接

标签 python windows sockets

服务器:

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='' 默认绑定(bind)到 Win 7 下的本地主机 (127.0.0.1)(我目前无法访问 Win 7 计算机)。

为了使您的服务器在主机上的所有 (IPv4) 接口(interface)上都可以访问,这应该适用于 Linux、Windows、Mac 等:

host = '0.0.0.0'
s.bind((host, 8080))

要验证套接字绑定(bind)到哪个地址,您可以这样做:

>>> s.getsockname()
('0.0.0.0', 8080)

关于Python套接字只接受本地连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5710443/

相关文章:

打开使用 re.search 刚刚找到的文件时,Python 不返回此类文件或目录

python - 如何使用 Selenium 和 Python 处理 try 循环中的错误

javac 版本和 java 版本在命令行上显示不同

Python 3.5 connection.py : sock. connect(sa) ConnectionRefusedError: [Errno 111]

linux - 为什么 gethostbyname 和 gethostbyaddr 被认为已过时?

linux - 服务器不接受端口 9999 上的请求

python - Keras、Tensorflow - 计算指标时 K.epsilon 的含义是什么

python - Pygame Surface 非顺序更新

windows - 无法在 Windows/Cygwin 上使用 perl 确定文件创建时间

windows - 无法将奴隶连接到主人