0

UDP ソケットをサーバーに送信するコードがいくつかあります。現在、私はローカルで実行する別のサーバーコードを持っています。これは、送信されたものをすべて読み取り、受信したものを正確に書き戻します。

次に行う必要があるのは、構造体の送受信です。構造体は問題なく送信できますが、サーバーから受信するとマッシュアップされます。これが私のコードです:

typedef struct {
 char first_part[4];
 char second_part;
 char third_part[2];
} Cloud;

次にmain

char reply[BUFLEN], message[BUFLEN];
Cloud data;

strcpy(data.first_part, "test");
data.second_part = 'a';
strcpy(data.third_part, "hi");

printf("Size:%d\n", sizeof(data));

//This part seems to work---
char* package;
package = (unsigned char*)malloc(sizeof(data));
memcpy(package, &data, sizeof(data));
printf("Size:%d\n", strlen(package));
strcpy(message, package);

udp_send_receive(message,reply);
//---So the message is sent, and the string received by the server is correct.

memcpy(package, message, strlen(message));
printf("Package: %s\n",package); //-This is also correct

memcpy(&data, package, sizeof(data));

printf(data.first_part); //--This is incorrect

ここで何がうまくいかないのか誰かが説明してくれたら本当にありがたいです。私はこの種のことについて少し経験がなく、データが特定の構造で転送される別のサーバーと通信する UDP サーバーを構築する任務を負っています。

4

3 に答える 3

1

コードに関するいくつかのポイント:

  1. これは:は4 文字しかないstrcpy(data.first_part, "test");ため、バッファ オーバーフローです。文字列全体をコピーしているため、追加の終了文字を書き込みます。0 で終わる文字列を使用したくない場合に使用します。first_partstrcpy()memcpy()
  2. これ:キャストpackage = (unsigned char*)malloc(sizeof(data));を削除する必要があります。
  3. また、sizeof(data)はやや単純に のように記述されsizeof dataます。
于 2013-09-16T14:57:00.050 に答える