我目前正在两个运行中的程序之间通过sockets发送Python(3.8)pickle对象。我有一些字节缓冲区,我想在接收端将其重构为相应的对象。
据我所知,
此外,由于我使用了线程,我在检查缓冲区之前可能会收到多个消息。
我的问题是: 考虑到我正在接收任意长度的字节流,其中可能包含少于或多于一个pickle对象,最好的重新组装方法是什么?是否有一个字符可用作终止符,保证不与
据我所知,
socket.recv
方法不能保证捕获所有发送的字节,需要调用者再次调用socket.recv
来接收剩余的数据。因此,在任何给定时间,我的缓冲区都可能包含部分数据包。此外,由于我使用了线程,我在检查缓冲区之前可能会收到多个消息。
我的问题是: 考虑到我正在接收任意长度的字节流,其中可能包含少于或多于一个pickle对象,最好的重新组装方法是什么?是否有一个字符可用作终止符,保证不与
pickle
冲突?
pickle
中,不存在可以保证不出现的字符或字符序列。在流协议中发送多个大小未知的数据块的通常方式是在每个数据块之前附加其长度;使用.recv()
方法接收完整的长度指示,然后继续调用.recv()
方法,直到接收到该数量的字节为止。这些长度本身可以是固定大小的,也可以使用一些终止字符。 - jasonharper