Попытка повторно подключить сокет TCP, который показывает ошибку сокета после отключения - PullRequest
0 голосов
/ 27 мая 2020

Вот функция, в которой клиент пытается подключиться или повторно подключиться к серверу: -

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

Я был бы рад, если бы кто-нибудь сказал мне, правильно ли я повторно подключаю клиента или есть другой способ переподключения

...