gpt4 book ai didi

Python套接字: cannot receive int array

转载 作者:行者123 更新时间:2023-11-30 19:32:07 24 4
gpt4 key购买 nike

我尝试通过winsockets 在Python 和C 程序之间进行进程间通信。发送字符串确实有效,但现在我尝试将 int 数组从 c 套接字发送到 python 套接字。

我已经发现我必须使用htonl()将int数组转换为字节流,因为winsock2的send函数无法直接发送int数组。

现在我想在 python 套接字中使用 ntohl() 但接收函数返回字节,而 ntohl() 需要一个整数值作为输入。

这是我的代码

C 端(仅相关部分):

uint32_t a[1] = {1231};
uint32_t a_converted[1]={0};
a_converted[0] = htonl(a[0]);
iResult = send( ConnectSocket, ( char *) a_converted, sizeof( a_converted), 0 );

Python 端(仅相关部分):

data = connection.recv(16)
data_i = socket.ntohl(data)

最佳答案

你收到的是一串字节,ntohl没有引起异常吗?您可以使用struct模块来解压 - 16字节

struct.unpack('!4I', data)

含义 - 按网络顺序解压 4 个无符号 32 位整数

RTM

(我无法测试它 - 你自己尝试一下)

编辑:哎呀,没有读完你的评论。根据sockets docsrecv应该返回字节类型的对象。如果它返回 str 类型的对象 - 您应该将其转换为 bytes - 在 Python3 中它将是 data.encode()

PS 你使用的是哪种Python?

关于Python套接字: cannot receive int array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47435650/

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