Пример #1
0
 def send(self,data_obj):
     '''
     发送数据,用于长连接模块
     发送后不关闭
     '''
     if self.sock == 0:
         return False
     dealdata = deal_packet()
     data = dealdata.pack(data_obj)
     try:
         self.sock.send(data)
     except Exception as e:
         if e !="":
             return "sockerr"
Пример #2
0
    def receive(self):
        # if self.sock == 0:
        #     return False
        dealdata = deal_packet()
        #记录临时长度
        temp_len = 0
        while True:
            try:
                recv_data = self.sock.recv(BUFSIZ)
            except Exception as e:
                print e
                return False

            if recv_data !="" or recv_data != None or recv_data != False:
                #ident标识符,length数据流长度,str_result第一次接受的全部数据流,temp_str粘包的数据流
                ident,length,str_result,temp_str = dealdata.unpack(recv_data,self.temp_data)

                if ident == IDENT_MARK:
                    #如果标识长度和数据长度相等,说明接受完整,可以输出
                    if length == len(str_result):
                        return str_result
                    #如果小于标识长度,说明包不完整
                    elif length >len(str_result):
                        temp_len += length-len(str_result)
                        self.all_data += str_result
                        continue
                    else:
                        self.temp_data += temp_str
                        self.all_data = str_result
                        return str_result
                else:
                    #如果标识不相等,说明还有没接收完的包
                    str_result = dealdata.extend_unpack(recv_data,self.temp_data)
                    #如果接受字节还小于temp_len,说明还有没接收完的包
                    if (temp_len-len(str_result))>0:
                        temp_len = temp_len-len(str_result)
                        self.all_data +=str_result
                        continue
                    else:
                    #如果temp_len小于或者等于接受的字节,就可以return
                        temp_len = 0
                        self.all_data +=str_result
                        temp_all_data = self.all_data
                        self.all_data =""
                        return temp_all_data
Пример #3
0
    def net_recv(self,recv_socket):
        dealdata = deal_packet()
        #记录临时长度
        temp_len = 0
        while True:
            try:
                recv_data = recv_socket.recv(BUFSIZ)
            except Exception as e:
                print e
                return False

            while recv_data !="" or recv_data != None or recv_data != False:
                #ident标识符,length数据流长度,str_result第一次接受的全部数据流,temp_str粘包的数据流
                try:
                    ident,length,str_result,temp_str = dealdata.unpack(recv_data,self.recv_data_temp)
                    self.recv_data_temp =""
                except:
                    self.recv_data_temp = recv_data
                    recv_data =""
                    break
                

                if ident == IDENT_MARK:
                    #如果标识长度和数据长度相等,说明接受完整,可以输出
                    if length == len(str_result) and temp_str =="":
                        self.call(recv_socket,str_result)
                        recv_data = ""
                        break
                    elif length == len(str_result) and temp_str !="":
                        self.call(recv_socket,str_result)
                        recv_data = temp_str
                        continue
                    #标识长度大于结果长度,说明断包
                    elif length >len(str_result):
                        self.recv_data_temp = recv_data
                        recv_data =""
                        break
                    else:
                        pass

        recv_socket.close()
        return 0
Пример #4
0
def _call(recv_socket,data):
    print "_call" 
    dealdata = deal_packet()
    recv_socket.send(dealdata.pack(data))
    print data