在 UDP 套接字上发送结构、浮点数和 int C++
Send struct, float and int over UDP sockets in C++
我想在用C++编写的客户端/服务器套接字程序中发送/接收包含浮点数和整数变量的结构。
早些时候,代码是用 C 编写的,所以我只是按如下方式发送它们:
//structure definition
struct {
float a;
float b;
float c;
float d[2];
}myStruct_;
//code to send struct
int slen = sizeof(client_sock)
if(recvfrom(sockFD, &myStruct_, sizeof(myStruct_), 0 ,(struct sockaddr *)&client_sock, &slen)<0) {
printf("Failure while receiving data %d" , WSAGetLastError());
getchar();
exit(1);
}
但是现在在C++,这给了我这个错误消息:
我错误:无法将参数"2"的"(匿名结构(*"转换为"char *"到"int recvfrom(SOCKET, char*, int, int, sockaddr*, int*(">
试图寻找这个错误,发现我必须在发送之前序列化结构,然后反序列化它以获得确切的结构。您能否建议/或提供一个如何序列化和反序列化它的示例?
您展示的代码只需稍作调整即可在C++中正常工作。
在某些平台(如 Linux(中,recvfrom()
被定义为期望一个指向它将填充的内存缓冲区的void*
指针。 在其他平台(如Windows(中,recvfrom()
期望使用char*
指针。
要消除错误,只需对缓冲区指针进行类型转换(就像使用第 5 个参数一样,您将传递一个sockaddr_in*
指针,其中需要sockaddr*
指针(:
recvfrom(sockFD, (char*)&myStruct_, sizeof(myStruct_), 0, (struct sockaddr *)&client_sock, &slen);
发送结构时执行相同的操作:
sendto(sockFD, (char*)&myStruct_, sizeof(myStruct_), 0, (struct sockaddr *)&server_sock, &slen);
相关文章:
- 使用 int 指针的浮点数的位表示形式
- 将浮点数除以 int 总是给出浮点数吗?C++
- 为什么 int 和浮点数的总和是 int?
- 使用按位 AND 和 popcount 而不是实际的 int 或浮点数乘法进行大 (0,1) 矩阵乘法
- 将 int 128 除法提升为浮点数
- 将大 int 转换为浮点数,而不舍入 c++
- 在 UDP 套接字上发送结构、浮点数和 int C++
- 给定一个整数 M,使得 (int)C < M 的最大浮点数 C 是多少?
- 将浮点数转换为 int,带和不带强制转换
- 将浮点数转换为 int,或将 int 强制转换为浮点数
- 如何将数组的一部分从 int 转换为浮点数并将值设置为另外两个数组
- 如何获取模板的类型,如模板<类型名 T>,并检查 T 是 int 还是浮点数或类
- 从无符号 int 转换为浮点数时出错
- 为什么浮点数和 int 具有如此不同的最大值,即使它们是相同的位数?
- 如何将转换 int 除法键入为浮点数
- 将 int 转换为浮点数
- 为什么int指针会给我一个浮点数
- c++将两个浮点数相除得到int
- 在c/++中将浮点数转换为两个int
- 将 Object int 数据成员转换为浮点数并划分会将奇怪的数据 cout 附加到控制台