struck 经过unpack 后得到多个元组
正常来说,struck 压缩一个数字成某个固定长度字节,应该只是得到这个数字
import struct
res = b'123344443222'
lens = len(res) # 12
a = struct.pack('i', lens) # b'\x0c\x00\x00\x00'
b = struct.unpack('i', a)
print(b) # (12,)
我在写一个注册程序时候得到这样一个问题
--- 服务端
from socket import *
import struct, json
ip_port = ('127.0.0.1', 1688)
server = socket()
server.bind(ip_port)
server.listen()
client, addr = server.accept()
while True:
json_pack = client.recv(4) # b'0\x00\x00\x00'
recv_data = struct.unpack('i', json_pack)
print(recv_data)
# info = client.recv(recv_data) # b'{"usr": "lxx", "pwd": "123", "wtfk": "register"}'
# print(info)
--- 客户端
from socket import *
import os, time, json, struct
ip_port = ('127.0.0.1', 1688)
client = socket()
for i in range(3):
try:
client.connect(ip_port)
print('%s 连接 服务器成功' % (os.getpid()))
break
except ConnectionRefusedError:
print('%s 正在连接' % (os.getpid()))
else:
# time.sleep(1)
print('%s 连接服务器失败' % (os.getpid()))
def register():
user = input('注册用户名>>> ').strip()
pwd = input('注册密码>>> ').strip()
info = {'usr': user, 'pwd': pwd, 'wtfk': 'register'}
json_data = json.dumps(info).encode('utf-8')
lens = len(json_data)
json_pack = struct.pack('i', lens)
print(json_pack) # b'0\x00\x00\x00'
print(json_data) # b'{"usr": "lxx", "pwd": "123", "wtfk": "register"}'
client.send(json_pack)
client.send(json_data)
def login():
user = input('登录用户名>>> ').strip()
pwd = input('登录密码>>> ').strip()
def run():
fun_dic = {
'1': register,
'2': login
}
while True:
choice = input('请选择功能 1.注册 2.登录 q:退出').strip()
if choice == 'q': break
if choice not in fun_dic: print('无此功能,请重试');continue
fun_dic[choice]()
run()
先运行服务端,然后运行客户端后地输出
2936 连接 服务器成功
请选择功能 1.注册 2.登录 q:退出1
注册用户名>>> lxx
注册密码>>> 123
b'0\x00\x00\x00'
b'{"usr": "lxx", "pwd": "123", "wtfk": "register"}'
请选择功能 1.注册 2.登录 q:退出
服务端地输出
(48,)
(1937056379,)
(540680818,)
(2021157922,)
(572533794,)
(577009520,)
(824320058,)
(740438834,)
(1953964576,)
(975334246,)
(1701978656,)
(1953720679,)
(2099409509,)