0

私には2つのプログラムがあります。1つはデータを送信し、もう1つはそのデータを受信する必要があります。

うまくいけばネットワークを介して構造体を送信するコードがいくつかあります。

ただし、構造体を受信するように受信プログラムをコーディングし、受信したデータをローカル構造体に渡して操作する方法がわからないため、正しく機能しているかどうかさえわかりません。

これが私が送信するために使用しているコードです

gamePacket.PplayerX = userSprite.x;
gamePacket.PplayerY = userSprite.y;
gamePacket.Plives = lives;
gamePacket.Pstate = state;
for(int z=0;z<8;z++)
{
    gamePacket.PenemyX[z] = enemySprite[z].x;
    gamePacket.PenemyY[z] = enemySprite[z].y;
}   

char Buffer[sizeof(gamePacket)];

UDPSocket.Send(Buffer);

構造体はPacketと呼ばれ、gamePacketはそのインスタンスです。私が立ち往生しているのは:

  1. 構造体を送信しても投稿したコードですか
  2. 受信プログラムで構造体を受信して​​、その中のデータを使用できるようにするにはどうすればよいですか。
4

2 に答える 2

1
  1. 送信ではなく、バッファを宣言するだけです。送信するには、入力する必要があります。また、sizeof の使用方法が間違っています。おそらくすべてのフィールドの正しいサイズが返されないため、それらをカウントアップする必要があります。

  2. 反対のことをすべて受け取ったら、構造体を割り当て、オフセットを使用してそれを埋めます

例が必要な場合は、尋ねてください。しかし、学習は研究を行っているので、正しい方向へのプッシュは十分だと思います. (これには何千もの例があります。)

Ps: 構造体のメモリが隣り合わせに配置されているため、ポインタ + オフセットを使用できます。配列と同じように、メモリのブロックです。

編集; このリンクはあなたが必要とするものです: Cのソケットを介して構造体を渡す 編集: ポインターを使用した例: 編集: これはC#ですか、それともC/C++ですか? 申し訳ありませんが、例を C/C++ に変更してください ;) '

struct StructExample
{
    int x;
    int y;
};

int GetBytes(struct* Struct, void* buf)
{

        //Access the memory location and store
        *(int*)(buf + 0) = Struct->x;
        *(int*)(buf + sizeof(int)) = Struct->y;
    return sizeof(Struct->x) + sizeof(Struct->y)
}

Ps: 携帯電話で入力しましたが、コンパイル/動作するかどうかは 100% 確信が持てません。

于 2013-01-09T21:06:16.483 に答える
0

c および c++ では、次のコードを使用できます。

struct StructExample
{
    int x;
    int y;
};
struct StructExample a;
a->x = 1;
a->y = 2;
send(FSocket, &a, sizeof(a), 0);
于 2014-04-13T19:36:13.057 に答える