1

おもちゃのクライアント/サーバー アプリを作成し、UDP ストリーム経由でデータを送信しています。「テスト」などの小さなメッセージを送信すると、すべてがうまく機能します。しかし、ファイルを転送しようとすると、あまりにも多くのデータを転送しているようです。

転送するファイルのサイズは 4k 弱です (少なくとも ls コマンドによると)。しかし、sendto 操作が完了すると、確認メッセージに、正確に 5000 バイト (バッファーの最大サイズ) を送信したことが示されます。

UDP はメッセージを順不同で転送する可能性があるため、必要がなければ sendto を分割したくありません。私が間違っていることを誰かが見ていますか?の使用に関係していると思いますが、必要sizeof(buffer)なバイト数を正確に転送する方法がわかりません。ありがとうございました!

これがコードの関連部分です。さらに必要な場合はお知らせください:

char buffer[5000];
char path[] = "myfile";

FILE* fp;
if ((fp = fopen(path, "rb")) == NULL) {
    printf(stdout, "Error opening the file: %s\n", strerror(errno));
    exit(1);
}

memset(&buffer[0], 0, sizeof(buffer));
do {
    fread(buffer, 1, MAXBUFSIZE, fp);
} while (!feof(fp));

if ( (numbytes = sendto(sockfd, buffer, sizeof(buffer), 0,
        (struct sockaddr *)&server_addr, sizeof(server_addr))) < 0)
{
    perror("send error");    
}

fprintf(stderr, "client sent %d bytes to server\n", numbytes);
4

1 に答える 1