网络上的Python套接字ipv6不起作用
Posted
技术标签:
【中文标题】网络上的Python套接字ipv6不起作用【英文标题】:Python socket ipv6 over network not working 【发布时间】:2021-12-19 09:54:15 【问题描述】:我正在尝试使用套接字将服务器连接到 python 中的客户端。 问题是使用 ipv6 绑定,它可以在我的本地网络上运行。我想要的是将它连接到另一个网络。这些程序是用 Python 3 编写的
这里是server.py的代码:
import socket
HOST = someip
PORT = someport
server = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
server.bind((HOST, PORT))
server.listen()
client.py源码:
import socket
HOST = someip
PORT = someport
client = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
client.connect((HOST, PORT))
我认为这是一个端口转发问题。 我知道代码现在什么都不做,但我想先建立连接。
【问题讨论】:
检查您的客户端和服务器网络中的路由器设置。默认情况下,IPv6 路由通常被禁用。 ISP 有时还要求您提交专用请求以启用 IPv6(如果他们完全支持) 1.在黑暗中射击:尝试它是否适用于 IPv4。至少这会给我们一个提示,说明出了什么问题。 2. 这是一个网络问题,所以您必须向我们描述您的网络布局。在我们讨论的过程中:您对路由的总体经验如何? 它适用于 ipv4,但 ipv4 仅适用于本地网络。我希望它可以在不同的网络上工作 请分享您收到的错误信息;完整的。 @AlesTeska 没有错误信息,只等待连接,不工作。 【参考方案1】:当服务器收到一个请求时,我们需要把它放在一个循环中接受它。 像这样
import socket
HOST = someip
PORT = someport
server = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
server.bind((HOST, PORT))
server.listen()
while True:
try:
conn, addr = server.accept()
print(f"New request from addr")
except KeyboardInterrupt:
server.close()
【讨论】:
以上是关于网络上的Python套接字ipv6不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Python QtNetwork.QTcpSocket.readAll() 和 QtNetwork.QTcpSocket.write() 不起作用