1

我需要一个 python 程序来使用 TCP 连接(到另一个程序)来检索 9 个字节的集合。

九个字节中的第一个代表一个字符,其余的代表一个双精度。

如何从 python 套接字中提取这些信息?我是否必须手动进行数学运算才能转换流数据,还是有更好的方法?

4

2 回答 2

3

看看蟒蛇struct

http://docs.python.org/library/struct.html

所以像

from struct import unpack

unpack('cd',socket_read_buffer)

--> ('c', 3.1415)

小心字节序。

于 2012-05-08T16:58:00.317 回答
0

如果客户端和服务器都是用python编写的,我建议你使用pickle。它允许您将 python 变量转换为字节,然后返回到具有原始类型的 python 变量。

#SENDER
import pickle, struct

#convert the variable to bytes with pickle
bytes = pickle.dumps(original_variable)
#convert its size to a 4 bytes int (in bytes)
#I: 4 bytes unsigned int
#!: network (= big-endian)
length = struct.pack("!I", len(bytes))
a_socket.sendall(length)
a_socket.sendall(bytes)

#RECEIVER
import pickle, struct

#This function lets you receive a given number of bytes and regroup them
def recvall(socket, count):
    buf = b""
    while count > 0:
        newbuf = socket.recv(count)
        if not newbuf: return None
        buf += newbuf
        count -= len(newbuf)
    return buf


length, = struct.unpack("!I", recvall(socket, 4)) #we know the first reception is 4 bytes
original_variable = pickle.loads(recval(socket, length))

于 2017-12-18T09:18:33.390 回答