Senden Sie eine Struktur über Sockets in C

Ich entwickle eine client/server-Programm, und mein client zum senden von Nachrichten an den server.

Beispiel-Nachricht C-Struktur:

struct Registration
{
char multicastGroup[24];
pid_t clientPid;
};

Client-code-snippet zu serialisieren struct

struct Registration regn ;
regn.clientPid = getpid();
strcpy(regn.multicastGroup, "226.1.1.1");

printf("PID:%d\n", regn.clientPid);        
printf("MG:%s\n", regn.multicastGroup);
printf("Size:%d\n", sizeof(regn));           //Size is 28

data = (unsigned char*)malloc(sizeof(regn));
memcpy(data, &regn, sizeof(regn));
printf("Size:%d\n", sizeof(data));           //Size is 4.  

Server-code zu de-serialisieren Daten

if(recvfrom(sd, recvBuf, recvBufSize, 0, (struct sockaddr*)&clientAddr, &len) < 0)
{
       printf("Error receiving message from client\n");
}
else
{
       printf("Message received:%s\n", recvBuf);
       printf("Size :%d\n", strlen(recvBuf));
       memcpy(&regn, recvBuf, sizeof(regn));
       printf("PID:%d\n", regn.clientPid);
       printf("MG:%s\n", regn.multicastGroup);
}

Nach dem kopieren der Struktur zu unsigned char * die Größe des Arrays ist nur 4.

Warum werden die Daten nicht vollständig kopiert, das array?

Server ist nicht in der Lage zu rekonstruieren, die struct aus dem char-array.

Bitte lassen Sie mich wissen, was mache ich falsch.

InformationsquelleAutor cppcoder | 2013-07-23
Schreibe einen Kommentar