从 iOS Safari 浏览器连接到 Python 套接字



我有一个python套接字在特定端口上侦听计算机的IP地址。我正在使用标准的python套接字库,其代码类似于以下代码:

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind(server_address) # Server address is a tuple (HOST, PORT) with host being 
# something like 123.456.789.00 and port being 4000
listen_socket.listen()
client_connection, client_address = listen_socket.accept()
request_data = client_connection.recv(1024).decode('utf-8')
print(request_data)

当我在iPhone上使用Chrome连接到地址时,我的其余代码运行良好,并通过发送html页面来处理传入的请求。当我使用 Safari 时,它会加载一段时间,直到失败并显示"Safari 无法打开页面,因为它无法连接到服务器"。

有趣的是,如果我留在页面上,重新启动服务器,然后使用刷新按钮重新加载页面,它会连接正常。但是尝试通过 url 地址访问该地址不起作用。使用刷新按钮刷新似乎有效。为什么 Safari 无法连接到我的 Python 套接字?

尝试增加 listen_socket.listen(( 调用中的积压计数。

我在python 2套接字服务器和macOS Safari上遇到了类似的问题。 Safari会说它无法连接到服务器,但Chrome/Firefox/IE/curl都可以正常工作,没有任何错误。我改变了这个:

listen_socket.listen(1)

对此:

listen_socket.listen(5)

然后Safari工作了,没有任何错误。 我现在使用 128 而不是 5,不确定 Python 3 中的默认值是什么。

当设置为 1 时,在 python 服务器中,我会看到 Safari 连接,但随后 socket.recv(( 永远不会返回。

最新更新