gpt4 book ai didi

Python套接字只接受本地连接

转载 作者:可可西里 更新时间:2023-11-01 13:53:57 25 4
gpt4 key购买 nike

服务器:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com