クライアント/サーバープログラムを開発していて、クライアントがサーバーにメッセージを送信する必要があります。Cでソケットを介して構造体を送信
サンプルメッセージC構造:デシリアライズデータ
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);
}
に構造体
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.
Serverコードをシリアル化する
struct Registration
{
char multicastGroup[24];
pid_t clientPid;
};
クライアントコードスニペット
構造体をunsigned char *
にコピーした後、配列のサイズは4になります。
データが配列に完全にコピーされないのはなぜですか?
サーバーは、char配列から構造体を再構築できません。
私が間違っていることを教えてください。
このデータをソケット経由で送信したいとします。したがって、私は 'memcpy'それを' unsigned char * 'にしています – cppcoder
@cppcoderあなたが' sizeof(struct registration) 'を使用して保存したデータのサイズをとる場合に使用します。 –
@cppcoder' sendto() '? C –