gpt4 book ai didi

Python Tcp 断开连接检测

转载 作者:太空狗 更新时间:2023-10-29 22:26:35 24 4
gpt4 key购买 nike

我有一个简单的例子:

import socket
import time


TCP_IP = '127.0.0.1'
TCP_PORT = 81
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))

while True:
s.send(bytes('hello', 'UTF-8'))
time.sleep(1)

s.close()

如果与服务器的连接断开,我如何检测,然后如何安全地重新连接?

是否需要等待服务器响应?

更新:

import socket
import time

TCP_IP = '127.0.0.1'
TCP_PORT = 81
BUFFER_SIZE = 1024

def reconnect():
toBreak = False
while True:
s.close()
try:
s.connect((TCP_IP, TCP_PORT))
toBreak = True
except:
print ("except")
if toBreak:
break
time.sleep(1)


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))

while True:
try:
s.send(bytes('hello', 'UTF-8'))
print ("sent hello")
except socket.error as e:
reconnect()

time.sleep(1)

s.close()

如果我断开连接,它会引发一个错误(什么都不重要),然后转到重新连接循环。但是在我恢复连接后,连接返回此错误:

OSError: [WinError 10038] 试图对非套接字的对象进行操作

如果我重新启动调用相同 s.connect((TCP_IP, TCP_PORT)) 的脚本,它会正常工作。

最佳答案

你会得到一个 socket.error : [Errno 104] Connection reset by peer任何调用 ECONNRESET 的异常(又名 send())或 recv()如果连接丢失或断开。因此,要检测到这一点,只需捕获该异常:

while True:
try:
s.send(bytes('hello', 'UTF-8'))
except socket.error, e:
if e.errno == errno.ECONNRESET:
# Handle disconnection -- close & reopen socket etc.
else:
# Other error, re-raise
raise
time.sleep(1)

关于Python Tcp 断开连接检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21027949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com