Вот функция, в которой клиент пытается подключиться или повторно подключиться к серверу: -
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
Я пытаюсь установить sh соединение здесь. Это происходит только один раз и повторяется, если соединение прерывается.
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
В этой части программное обеспечение вводит время l oop, чтобы не пропускать какие-либо данные, и снимает флажок тайм-аута, если данные не получены в течение 1 секунды. c
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 настроен на восстановление sh соединения с сервером при истечении времени ожидания.
Моя проблема в том, что я всегда получаю тайм-аут через какое-то время, и когда я пытаюсь повторно подключиться, мой сокет всегда показывает исключение «ошибка сокета» и никогда не подключается повторно. Это мой код подключения к сокету: -
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
Я был бы рад, если бы кто-нибудь сказал мне, правильно ли я повторно подключаю клиента или есть другой способ переподключения