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

问题描述 投票:0回答:1

我有一个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套接字?

python sockets mobile-safari
1个回答
0
投票

尝试增加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()永远不会返回。

© www.soinside.com 2019 - 2024. All rights reserved.