我有一个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()永远不会返回。