python socket 定義協議通信 拆包與粘包


    #dataAnalysis from Client
    def dataAnalysis(self):
        datafmt='<IIIIIIII'
        #定義struct 解包格式,相當協議格式
        fmtLen = struct.calcsize(datafmt)
        #得到協議長度
        while len(self._buffer) >= fmtLen:
            print "Buffer Length:%s" % len(self._buffer)
            (protocLength,) = \
                struct.unpack('<I',self._buffer[:self.HEADERSIZE])
            #取得協議體長度,協議體為protoc
            print protocLength
            if len(self._buffer) == fmtLen+protocLength:
            #得到完整協議+協議體
                HeadStr=self._buffer[:fmtLen]
                #取出協議
                ProtocStr=self._buffer[fmtLen:fmtLen+protocLength]
                srcStr = struct.unpack(datafmt,HeadStr)
                #解包協議格式
                toIP = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)])
                #取得IP地址,由整數轉換成IP
                print srcStr
                print 'IP is',toIP(srcStr[6])
                
                print '處理protoc'
                print test1
                self._buffer = self._buffer[fmtLen+protocLength:]
                #分包
            elif len(self._buffer) < fmtLen+protocLength:
                print "Continue Received"
                return
            else:
                print "Error"
                self.transport.loseConnection()
                return


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM