我想在用C编写的客户端/服务器套接字程序中发送/接收包含float和int变量的结构 .
早些时候,代码是用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中,这给了我这个错误信息:
错误:无法将'(anonymous struct)*'转换为'char *'以将参数'2'转换为'int recvfrom(SOCKET,char *,int,int,sockaddr *,int *)'
我试图寻找这个错误,并发现我必须在发送之前序列化结构,然后反序列化相同以获得确切的结构 . 你能建议/或提供一个如何序列化和反序列化的例子吗?
1 回答
您展示的代码在C中可以正常工作,只需稍加调整即可 .
在某些平台(如Linux)中,
recvfrom()
被定义为期望指向它将填充的内存缓冲区的void*
指针 . 在其他平台(如Windows)中,recvfrom()
需要一个char*
指针 .要摆脱错误,只需输入缓冲区指针(就像使用第5个参数一样,在那里传递
sockaddr_in*
指针,其中需要sockaddr*
指针):发送结构时执行相同的操作: