私はソケットプログラミングの初心者で、送信側と受信側で異なるバッファサイズを使用してソケット経由でデータを送信すると問題が発生します。2 つの基本的なプログラム、トーカーとリスナーを作成する必要があります。標準入力に渡されたすべてのものを送信し、ソケットを介して送信する必要があり、受信者はデータを出力する必要があります。問題は、送信側と受信側で異なるバッファ サイズを使用すると、受信側で印刷されるデータが不完全または順不同になることです。理由がわかりません。
最も関連性の高いコードは次のとおりです。
聞き手:
#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
私が間違っているのは何ですか?
お仕事お疲れ様です!