#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