**
在做即时通讯的时候,考虑到传递数据的准确性,采用了Socket传输,每一条发送的数据都是Struct结构。
**
服务器端涉及到跟数据库的交互,交互的过程我就不说了,这个主要写下客户端跟服务器的交互。
下面是服务器端数据处理的的代码
def DataHand(self,DATA):
# 处理数据
global HandledData
if DATA[0] == 0:
Data = MySqlHand.PosAllData()
for row in Data:# 请求所有用户信息
Dead = row[2]
User_ID = str(row[0])
PWD = str(User_ID[5]) + str(len(row[2])) + str(User_ID[1]) + str(Dead) + str(User_ID[2]) + str(User_ID[3]) + str(Dead[0:2])
NewData = (0, row[0], str(row[1]), PWD, str(row[3])) # 返回个人信息!
SendData = TransData.ServerPack(NewData)
HandledData.append(SendData)
elif DATA[0] == 1:# 聊天信息
LocaData = MySqlHand.MsgPost(DATA[1])
for Row in LocaData:
NewData = (1,Row[0],Row[1],Row[2],Row[3],Row[4])
SendData = TransData.ServerPack(NewData)
HandledData.append(SendData)
else:
print("数据有问题!")
**
服务器端数据转化为struct结构代码以及Struct转化为普通python数据的代码
**
def ServerPack(self,argv):#服务器端发送的信息
if argv[0] == 0:
StructData =struct.pack('IIII40s40s40s',argv[0],argv[1],ID,ID,self.EncodeData(argv[2]),self.EncodeData(argv[3]),self.EncodeData(argv[4]))
return StructData
elif argv[0] == 1:
StructData = struct.pack('IIII40s40s40s', argv[0], argv[1], argv[2],argv[3], self.EncodeData(argv[4]),self.EncodeData(argv[5]), self.EncodeData(StrData))
return StructData
def ServerUnpack(self,argv):#服务器端接收到的信息
StructData = struct.unpack('IIII40s40s40s',argv)
if StructData[0] == 0:
Data =(StructData[0],'A')
return Data
elif StructData[0] == 1:
Data =(StructData[0],StructData[1])
return Data
完整的代码是我的个人资源中的
客户端服务器交互(struct结构).zip