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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一类

错误原因:发送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次,失败则断开
Traceback (most recent call last): File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\connectionpool.py", line 716, in urlopen httplib_response = self._make_request( File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\connectionpool.py", line 404, in _make_request self._validate_conn(conn) File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\connectionpool.py", line 1061, in _validate_conn conn.connect() File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\connection.py", line 419, in connect self.sock = ssl_wrap_socket( File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\util\ssl_.py", line 458, in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\util\ssl_.py", line 502, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) File "F:\anaconda\envs\label_studio\lib\ssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "F:\anaconda\envs\label_studio\lib\ssl.py", line 1073, in _create self.do_handshake() File "F:\anaconda\envs\label_studio\lib\ssl.py", line 1342, in do_handshake self._sslobj.do_handshake() ConnectionResetError: [WinError 10054] 远程主机强迫关闭一个现有连接。 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "F:\anaconda\envs\label_studio\lib\site-packages\requests\adapters.py", line 667, in send resp = conn.urlopen( File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\connectionpool.py", line 802, in urlopen retries = retries.increment( File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\util\retry.py", line 552, in increment raise six.reraise(type(error), error, _stacktrace) File "F:\anaconda\envs\label_studio\lib\site-packages\urllib3\packages\six.py", line 769, in reraise raise value.with_traceback(tb) File "F:\anaconda\envs\label_stu
最新发布
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值