Cで単純なサーバークライアントプログラムを作成しようとしています。クライアントでサーバーからメッセージを受信しようとしましたが、メッセージのサイズはあらかじめ決められていません。したがって、どのくらいのバイトが入ってきているか確認したい、そして適切なサイズのmalloc
をチェックしたい。サーバーからのメッセージを正しく受信できないためにioctl()、read()、malloc()を使用する
私はioctl
を使用しようとしましたが、私はあまりにも遅くしたい情報を得るようです。 これは私が持っているものです。
char *message_from_server;
int length;
while(1){
ioctl(socket, FIONREAD, &length);
message_from_server = malloc(length);
read(socket, message_from_server, length);
}
私はそれを初めて使用するとき、length
が0秒の時間であり、長さは、第1のメッセージと同じです。私が読んだ後に私がioctl(socket, FIONREAD, &length);
という行を置くと、それは正しい量のスペースをmallocすることで私に問題を起こすかもしれません。これは私の問題を解決する有効な方法ですか?
私は問題を解決するためにrealloc
を使用することができると聞いていますが、私はそれをどのようにして問題を解決するのか苦労しています。それがより良い方法であれば、私はどんなヒントにも満足しています。
ありがとうございます!
TCPのみでは、着信データのサイズがあらかじめ決められています。これは1バイト以上になります。 ioctlで 'peeking'することで1バイト以上のアプリケーションメッセージを実装しようとしている場合や、read()が常に1バイト以上の完全なメッセージでバッファをロードすると仮定すると、まもなく問題になります。 –