私はソケットプログラミングに関する初心者です。送信側と受信側で異なるバッファサイズを使用してソケットを介してデータを送信すると問題が発生します。 私は2つの基本的なプログラム、話者、リスナーを作らなければなりません。 1つは、渡されたすべてをstdinに送信し、ソケットで送信し、受信者はデータを出力する必要があります。 問題は、送信側と受信側で異なるバッファサイズを使用すると、受信側によって印刷されるデータが不完全であるか、順不同であることです。なぜ私は理解できないのですか?sendとrecvのバッファサイズが異なる場合の問題
リスナー:
#define BUFFERSIZE 20
...
while((numbytes = recv(new_fd, buf, BUFFERSIZE - 1, 0)) > 0) {
buf[numbytes] = 0;
printf("%s", buf);
}
perror("recv");
トーカ:たとえば
#define BUFFERSIZE 10
...
while(fgets(buffer, BUFFERSIZE , stdin) != NULL)
{
printf("%s", buffer);
if ((numbytes = send(sockfd, buffer, sizeof buffer, 0)) == -1) {
perror("talker: sendto");
exit(1);
}
printf("\n");
}
、これでここ
は、コードの最も関連性の高い作品ですテストファイル:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
それは
➜ ./listener
abcdefghijklmnopqrabcdefghiiz
recv: Success
abcdefghijklmnopqrr
それは私が間違ってやっていることは何ですかを印刷するのでしょうか?
ありがとうございます!
MAXBUFLENの値は何ですか? –
それは間違いでした:BUFFERSIZEであったはずです。ありがとう:) –