尝试重新连接断开连接后显示套接字错误的TCP套接字

时间:2020-05-27 10:06:52

标签: python sockets tcp

这是客户端尝试与服务器连接或重新连接的功能:-

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

如果有人告诉我我是否没有正确地重新连接客户端或是否有另一种重新连接方法,我会很高兴

0 个答案:

没有答案