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

第一类

错误原因:发送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. 远程主机强迫关闭一个现有连接
    频繁发送socket命令返回:[WinError 10054] 远程主机强迫关闭了一个现有的连接_第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次,失败则断开

你可能感兴趣的:(python,socket,bug解决,linux,服务器,运维,python,websocket)