【发布时间】:2018-05-06 05:57:03
【问题描述】:
我尝试通过 winsockets 在 Python 和 c 程序之间进行进程间通信。发送字符串确实有效,但现在我尝试将一个 int 数组从 c 套接字发送到 python 套接字。
我已经发现,winsock2的send函数不能直接发送int数组,所以必须使用htonl()将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)
【问题讨论】:
-
您确实不必在发送之前必须
htonlint。根本没有理由,除非您定义了需要它的协议。如果您确定服务器和客户端都使用相同的字节序,请按原样发送。 -
但我仍然必须将 int 数组转换为 const char *buf,它确实可以正常工作
标签: python c sockets typeerror htonl