服务器:
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/