首页 文章

通过C中的UDP套接字发送struct,float和int

提问于
浏览
0

我想在用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 回答

  • 1

    您展示的代码在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);
    

相关问题