当前位置: 首页 > 知识库问答 >
问题:

Python'连接由对等重置'

宗政博文
2023-03-14

我正在使用Python,并在给定端口上侦听UDP数据包,一切似乎都很好地工作-但经过较长时间后,脚本崩溃,出现以下错误:

data = self._sock.recv(self._rbufsize)
socket.error: [Errno 54] Connection reset by peer

当重新启动脚本时,相同的崩溃会在较短的时间后再次发生。相反,重新启动服务器似乎可以再次完全解决问题。

关于插座方面的事情,我正在做:

UDP_IP = "0.0.0.0"
UDP_PORT = 6000

sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind( (UDP_IP, UDP_PORT) )

我是否遗漏了一些显而易见的东西,或者只是有一个简单的方法来避免这种情况?

提前感谢您提供的任何信息!

本吉

共有2个答案

黎震博
2023-03-14

这不是最相关的,但我在尝试向DNS(DoH)解析器发送HTTP GET请求(使用Python套接字)时,由于对等错误而重置了相同的ErrNo54或ErrNo104连接。

我通过修复HTTP请求中的参数来解决它。在我的例子中,我最初有一个Content-Type: Application/dns-消息,后来我将其更改为接受:Application/dns-消息。

希望这能帮助任何遇到类似问题的人。

巴帅
2023-03-14

UDP套接字上的错误“由对等方重置连接”表示客户端已从服务器发送的数据包上接收到ICMP错误消息(例如:端口不可访问、超出TTL等)。

我无法确定是什么原因导致您的代码出现这种情况,但我可以提供两个想法:

  1. 连接确实被某种东西(路由问题、服务器端故障等)中断了。在这种情况下,您可以检查此错误,如果发生此错误,您可以重新打开套接字
  2. 对我来说,更可能发生但我不太熟悉的是,SO\u REUSEADDR导致了这个问题。此套接字选项允许您在同一端口上打开多个套接字。可能发生的情况是,其他进程正在尝试使用端口6000,成功(因为您告诉操作系统不要阻止它),并且操作系统关闭了您的套接字。因为我看不到在UDP套接字上使用的理由,所以我建议您删除行sock。设置sockopt(socket.SOL\u socket,socket.SO\u REUSEADDR,1)并重试

祝你好运!

 类似资料:
  • 我正在尝试让一个简单的主机/客户端传输工作。我遵循了一个教程,服务器正常运行,但当客户端尝试连接时,它返回“由对等端重置连接”我真的不知道错误在哪里。

  • 调试此程序时遇到一些问题。我总是在第一次启动我的应用程序时出现这个错误,然后间歇性地出现。有人能帮我扔掉一些调试技巧吗?我试过使用代理检查器,但没有用,我没有看到任何有用的东西。我尝试过在django设置中设置我的站点URL的建议。我尝试了使用和不使用http://以及使用和不使用端口。。。下面是一个毫无帮助的错误: 即使有了这个连接重置,这个应用程序似乎也能正常运行,但它一直让我疯狂地试图调试。

  • 我在RabbitMQ上犯了stainger错误。我发送了一些关于MQ和Php产品的信息,但出现了一些问题。我可以在出现异常“errno=104由对等方重置连接”的一分钟后发送消息。见下文: rabbitmq-3.6的版本。1,php-7.0版本。5,php amqp库的版本-“Videlavaro/php amqplib”:“~2.7 来自rabbitmq的日志:

  • 到目前为止,每当我遇到问题时,我都会使用这个网站,我也找到了解决方案,但这次我甚至不知道发生了什么。 我正在开发一款基于1对1多人模式的游戏。到目前为止,我已经创建了一个服务器和我的客户端程序。 我的服务器为每个与服务器连接的客户端创建一个带有套接字的新线程,当在游戏中按下“新游戏”按钮时,线程会搜索另一个正在寻找新游戏的线程,一旦它找到他,创建一个单独的线程,向两个线程发送消息,向它们发出游戏已

  • 问题内容: 我设置rabbitmqserver并使用以下步骤添加了用户: 我的celery配置是这样的: 我的代码是这样的: 当我尝试跑步时 我懂了 一切看起来都很完美!有人可以帮我我在这里想念的吗? 问题答案: 一旦我将代码部署到生产环境并将Celery升级到3.1.12,问题就解决了。我最初使用3.0.19,但后来进行了升级,但没有发现任何问题。感谢您的支持。

  • 当我处理REST服务时,这是我应该期待的吗?我的服务器在亚马逊EC2上。 读取错误:SSL=0x1211A88:系统调用期间发生I/O错误,连接由对等方重置 javax.net.ssl.sslexception:读取错误:SSL=0x1211A88:系统调用期间的I/O错误,连接由在org.apache.harmony.xnet.provider.jsse.nativecrypto.ssl_rea