这是客户端尝试与服务器连接或重新连接的功能:-
while True:
func()
def func(self):
TxData = 0
if self.hConDat > -1:
TxData = 1
else:
self.hConDat = self.OpenTcpIpDatCom(self.stIpAdr, int(self.DatPort))
TxData = 1
我正在尝试在这里建立连接。这种情况只会发生一次,并在连接断开时重复发生
Ret = Init_func()
if TxData > 0:
try:
RxBytes = self.RadDatSocket.recv(1028)
if len(RxBytes) == 1028):
self.prev_RxBytes= RxBytes
except Exception:
print("Error in Arm_ReadFrm recv: Exception raised")
return Ret
while len(RxBytes) < (1028):
LenData = len(RxBytes)
RxBytes = RxBytes + self.RadDatSocket.recv(int(1028)) # recev from Socket
end=time.time()
if end-start > 1: # timeout here of 1 sec
RxBytes=self.prev_RxBytes
self.bus_err_flag=1
break
在此部分中,软件进入while循环以不跳过任何数据,并在1秒钟内未收到任何数据时释放超时标志。
if self.bus_err_flag == 0: # The receonnection option is chosen
self.hConDat= 1 # trying to set reconnect flag here
else:
self.hConDat=-1
self.bus_err_flag=0
Function 'func()' ends here---------------------------------
此处将hConDatFlag设置为在发生超时时与服务器重新建立连接。
我的问题是我总是在某个时间后超时,当我尝试重新连接时,我的套接字始终显示异常-“ socket-error”,并且从不重新连接。这是我的套接字连接代码:-
def OpenTcpIpDatCom(self, IpAdr, Port):
try:
self.RadDatSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.RadDatSocket.settimeout(2)
self.RadDatSocket.connect((IpAdr, Port))
print('trying to connect to Server')
hConDat = 1
except socket.timeout:
hConDat = -1
print("Socket timed out")
except socket.error:
hConDat = -1
print("socket error")
return hConDat
如果有人告诉我我是否没有正确地重新连接客户端或是否有另一种重新连接方法,我会很高兴