[英]Python socket receive and store data
我已经在C ++程序和python脚本之间建立了一个套接字。 一切都很简单,我想从C程序向Python发送大约20 Hz的坐标。 这只是第一次尝试,我想发送一组坐标,如下所示:
C ++程序,服务器:
struct coord {
int x;
int y;
int z;
};
struct coord co;
co.x = 1;
co.y = 2;
co.z = 3;
char *msg;
msg = (char*) &co;
send(newsockfd, msg,strlen((char*) &co), 0);
这是重要的部分,在此之前我已经成功地初始化了具有特定地址的套接字。 现在,我想将这三个坐标发送到python程序。 我将地址发送到第一个整数(co.x)和分配的内存,该内存应为12个字节。
这是python脚本。 同样,我只包含了重要的内容。
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(server_address)
recvInt = sock.recv(4096)
现在,我想访问前4个字节并将其存储在变量中,然后将后4个存储在单独的变量中,将后4个存储在第三个变量中。 但是我该怎么做呢? recvInt是这个看似无用的对象Byte,我没有设法将其转换为任何东西,并且打印输出也没有任何意义。 有人可以帮我还是指出正确的方向?
编辑:当我执行以下打印输出:type(recvInt)时说它是一个str。 考虑到函数socket.recv()的文档也很奇怪,该文档明确声明它返回了一个字节。 但是,现在我也找到了文档,该函数应返回数据的字符串表示形式。 哪个是对的? 这个假定的字符串表示形式只是一个带有四个数字的小盒子,看起来像一个字节的可视表示形式。 但是msg包含12个字节,并且recvInt上没有索引。 谢谢
看一下python的struct库。
本质上,对于您的情况,类似以下的内容可能会起作用。
import struct
x, y, z = struct.unpack("!iii", receivedData)
上面的代码会将收到的字符串解析为3个带符号的整数。
socket.recv
返回一个二进制字符串,该字符串本质上是一个字节数组。 Python没有为recvInt或parseInt提供单独的函数,而是提供了一个库来将任意二进制字符串解析为不同大小的整数或字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.