C++言語を使用してクライアントからサーバーへのソケットを使用してファイル転送を行いたい...
私が持っているコードは、文字列をクライアントとサーバーに転送するだけです。
ファイルを転送するにはどうすればよいですか?ヘルプや参考資料も役立ちます。
ファイルをバイト ストリームに変換し、これをソケット経由で送信して、サーバー上でバイトストリームとして読み取ります。
Winsock 固有のソリューションで問題ない場合は、TransmitFile()
関数を見てください。Linux と Solaris はどちらもsendfile()
似たような機能を持っていますが、Linux と Solaris のsendfile()
API は少し異なると思います。これらの関数には、ファイルの内容をアドレス空間にコピーする必要がないという追加の利点があります。
それ以外の場合は、以下を含むがこれらに限定されないいくつかのオプションがあります。
sendfile()
andTransmitFile()
関数は依然として高速です。いつものように、コードをプロファイリングします。考慮すべきもう 1 つのことは、ソケット書き込み操作をブロックするか非ブロックにするか、および受信側でも同様にするかどうかです。ノンブロッキング IO では、プラットフォームのイベント逆多重化メカニズム ( select()
POSIX プラットフォームなど) を使用する必要があります。
Boost.Asioを使用すると、タスクも大幅に簡素化される可能性があります。可能であれば、ネイティブ API よりも使用することをお勧めします。
チッ!
MSDN に従ってCSocketFileを見ることもできます
クラスCSocketFileは CFile から派生しますが、位置決め関数 (Seek、GetLength、SetLength など)、ロック関数 (LockRange、UnlockRange)、または GetPosition 関数などの CFile メンバー関数をサポートしません。CSocketFile オブジェクトが行う必要があるのは、関連する CSocket オブジェクトとの間で一連のバイトを読み書きすることだけです。