gpt4 book ai didi

python - Python 中套接字接收的习惯用法

转载 作者:太空狗 更新时间:2023-10-30 00:04:11 24 4
gpt4 key购买 nike

我有一些使用 C 中的 Berkeley 套接字 API 进行套接字编程的经验。通常,任何套接字编程都需要一种策略,使接收套接字知道它应该接收多少数据。这可以通过 header 长度字段或分隔符来完成。通常,我更喜欢包含长度的 header 字段。

当然,我们需要知道长度报头字段本身的大小,它只是一个必须由发送方和接收方商定的固定大小值。在 C 中,这很容易实现,因为 native 整数类型是固定大小且采用二进制格式,因此您可以这样说:

uint16_t bytes_to_receive;
recv(sock, &bytes_to_receive, sizeof(bytes_to_receive), 0);
bytes_to_receive = ntohs(bytes_to_receive);
// Now receive 'bytes_to_receive' bytes...

但是这种习语是如何使用 Python 套接字实现的呢?在 Python 中,整数是对象,腌制整数是可变长度的字节数组。所以我们不能使用 pickled 整数作为长度 header 字段,因为我们不能确定它的大小(以字节为单位)。

当然,我总是可以发送一个包含二进制整数的已知大小的字节数组,例如 b'\x05\x00' 以创建一个值为 5 的 16 位二进制整数little endian 格式,但这看起来确实不是正确的方法。

那么,这在 Python 中通常是如何完成的?

最佳答案

您可以使用 struct 模块将 Python 整数与字符串/字节数组相互转换。只需读取与类型 header 大小对应的字节数,并使用 struct 模块进行转换,就可以开始了。 (注意:一定要在编码/解码时使用正确的字节序标志)

关于python - Python 中套接字接收的习惯用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com