频繁发送socket命令返回:[WinError 10054] 远程主机强迫关闭了一个现有的连接

17 篇文章 0 订阅
2 篇文章 0 订阅
本文介绍了两种类型的网络错误:一是因频繁HTTP请求被网站视为恶意攻击;二是TCP连接中断。解决方法包括设置HTTP请求间的等待时间、设置socket超时时间,以及启用TCP保活机制以维持长连接。通过调整这些参数,可以有效防止网络连接中断,确保数据传输的稳定性和安全性。
摘要由CSDN通过智能技术生成

第一类

错误原因:发送http请求太过频繁,引起远程主机的怀疑,被网站怀疑是恶意攻击行为。
解决方法

  1. 在发送命令之后关闭连接,防止被认为恶意连接
  2. 设置socket默认等待时间
    设置读取信息的最大时间限制,如果超时的话程序将自动read下一项
socket.setdefaulttimeout(t)
# t设置得超时时间,以秒为单位
  1. 设置sleep()等待时间
    让代码等待一段时间后继续运行,避免太过频繁地进行信息抓取
time.sleep(t)
#t设置等待时间,以秒为单位

第二类

  1. 确定是否是网络连接不稳定造成的,连接中断,再发送指令就会报这个错误
    检查网络
  2. 请求超时原因
TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

在socket之前设置

socket.setdefaulttimeout(500)
  1. 远程主机强迫关闭一个现有连接
    在这里插入图片描述
    原因:
在网络开发使用TCP协议实现客户端和服务端通信时,某些场合需要保持长连接,
但这并不容易。在默认情况下,超过一定时间没有数据收发操作时,连接会自动断开,从而导致数据丢失。

在创建socket之后建立心跳机制,间隔时间发送包以保证连接状态正常

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, True)
sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 60 * 1000, 30 * 1000))
# 括号参数
# 1:开启保活机制
#60 * 1000:一分钟如果对方还没有反应,就开始探测连接是否存在
#30 * 1000:60秒探测一次,默认探测10次,失败则断开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值