0

tcp 経由で小さなパケットを送信しようとしていますが、サイズに問題があります。私のデータは255バイトのバッファです:

buffer[0] = 0x00;
buffer[1] = 0x04;
buffer[2] = 0x06;
buffer[3] = 0x08;
buffer[4] = 0x01;
buffer[5] = 0x01;

そして私は使用します

send(sockfd,buffer,6,MSG_NOSIGNAL|MSG_DONTWAIT); 

しかし、6を使用するとデータを送信できません。次のように送信する場合:

 send(sockfd,buffer,sizeof(buffer),MSG_NOSIGNAL|MSG_DONTWAIT);  

その後、データが送信されますが、受信者は余分な 250 0x00 バイトを解析する必要があり、私はそれを望んでいません。なぜ6はダメなの?また、ランダムに10回試しても何も変わりません。

これが私のレシーバーコードです

        while(1) {
           ret = recv(socket,buffer,sizeof(buffer),0);
           if (ret > 0) 
                 printf("recv success");
            else
            {
               if (ret == 0)
                   printf("recv failed (orderly shutdown)");
               else
                   printf("recv failed (errno:%d)",errno);
            }
        }
4

1 に答える 1

2

MSG_DONTWAITを取り除きます。これは、ソケット送信バッファがいっぱいでデータを送信できないときに他に何かすることがある場合にのみ役立ちます。send()の結果をチェックしていないので、明らかにその条件には関心がありません。ただし、エラーが発生した可能性があるため、とにかく送信の結果を確認する必要があります。そのため、コードも修正してください。

于 2012-11-07T22:17:20.637 に答える