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

2024-06-24 13:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个客户端尝试连接或重新连接服务器的函数:-

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循环以不跳过任何数据,并在no>;数据接收时间为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

如果有人告诉我我没有正确地重新连接客户机,或者有其他重新连接的方法,我会很高兴


Tags: selflenifheresocketflagfuncprint