分别从TCP流中解包对象

问题描述 投票:0回答:1

我想一一读取来自TCP流的对象,最好使用MessagePack库。

一方面,我有一个client,它在循环的每次迭代中:

  • 计算点位置(元组)
  • 打包该位置并通过套接字发送它

另一方面,是一个[[服务器那个:

    检测到客户端时接收数据
  • 解压缩该数据
  • 目前,我在接收时将数据存储在缓冲区中,然后在流结束时继续解压缩。我的问题是我需要一一拆开元组。换句话说,我想

    实时读取数据而不将其放入缓冲区。如果有可能,如何使用MessagePack做到这一点?

    -客户端-

  • #Python3.7 import socket import msgpack import math HOST = "127.0.0.1" PORT = 9000 den = 40 rad = 100 theta = math.tau / den with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: sock.connect((HOST, PORT)) #connect to server for step in range(den): x = math.cos(i*theta) * rad y = math.sin(i*theta) * rad data = msgpack.packb((x, y), use_bin_type = True) sock.sendall(data)

    -服务器端-

    #Jython2.7 <-- Python 2.7 compatible only from io import BytesIO import msgpack import socket HOST = "127.0.0.1" PORT = 9000 buf = BytesIO() s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) connection, address = s.accept() while True: try: data = connection.recv(1024) buf.write(data) except: buf.seek(0) unpacker = msgpack.Unpacker(buf, use_list=False, raw=False) for unpacked in unpacker: print(unpacked) buf = BytesIO()

    我想一一读取来自TCP流的对象,最好使用MessagePack库。一方面,我有一个客户端,在循环的每次迭代中:计算一个点...
    python sockets serialization tcp msgpack
    1个回答
    0
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.