【发布时间】:2014-01-09 18:11:53
【问题描述】:
我有一个 simpletcp 示例:
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)) 的脚本,它可以正常工作。
【问题讨论】: