Pracuję nad programem klient/serwer, a mój klient musi wysyłać wiadomości na serwer.Wyślij struct over socket do C
Przykładowa wiadomość C struktura:
struct Registration
{
char multicastGroup[24];
pid_t clientPid;
};
Client fragment kodu do serializacji 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, ®n, sizeof(regn));
printf("Size:%d\n", sizeof(data)); //Size is 4.
kod serwera de-serializacji danych
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(®n, recvBuf, sizeof(regn));
printf("PID:%d\n", regn.clientPid);
printf("MG:%s\n", regn.multicastGroup);
}
Po skopiowaniu struktury do unsigned char *
rozmiar tablicy wynosi tylko 4.
Dlaczego dane nie są w pełni skopiowane do tablicy?
Serwer nie może zrekonstruować struktury z tablicy char.
Proszę dać mi znać, co robię źle.
Chcę wysłać te dane przez gniazdo. Stąd jestem 'memcpy' to na' unsigned char * ' – cppcoder
@cppcoder której używasz funkcji, jeśli zajmuje ona rozmiar przechowywanych danych, to powinieneś użyć' sizeof (struct Registration) ' –
@cppcoder czy używasz' sendto() '? z C –