我有一个简单的tcp示例: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)),则它可以正常工作。