0

UNIX で TCP ソケット プログラムを実行していますが、read/recv を実行すると、常に同じデータが返されます。サーバーは 3 つの構造体を送信し、最初の構造体のみを何度も読み取ります

   int n_aux = 1;
   while(n_aux > 0)
   {
        struct trama mensajeaux;
        n_aux = recv(socket_cliente, &mensajeaux, sizeof(struct trama), 0);
    if(n_aux < 0)
    {
        printf("\nError al leer del buffer\n");
        return -1;
    }
    printf("\nMensaje recibido, tipo: %d, n: %d, v: %d, c: %d, origen: %d\n",      mensajeaux.tipo, mensajeaux.x, mensajeaux.y, mensajeaux.z, mensajeaux.origen);
}
4

1 に答える 1

0

1 回の読み取りで構造全体を受け取ったと想定しています。あなたはそれを仮定することはできません。read によって返されたカウントを見て、必要なものが得られるまでループします。

ところで、構造体をネットワーク プロトコルとして使用しないでください。オクテットでワイヤ プロトコルを定義し、それを送受信するコードを記述します。

于 2013-11-04T22:05:13.390 に答える