2

Windows で C 言語でクライアント サーバー プログラムを作成しようとしています。目的は、サーバーからディレクトリ リストを受信することです。今、私はほとんどのリソースを利用するような方法でクライアントサーバーを開発しようとしていました.

実装する 1 つの方法は、サーバーが 1 つの send() 呼び出しを行って、1 つのファイルの情報を送信することです。したがって、100 個のファイルがある場合、100 回の呼び出しが行われます。しかし、私はそれがネットワーク リソースの浪費だと感じています。私の知る限り、Windows の send() または recv() のバッファ サイズは 8kb です。しかし、1 ファイルの情報は 1kb にも満たないでしょう。send() を呼び出して複数のファイル情報を送信する方法はありますか (ファイル情報は構造体に格納されているため、基本的にリンクされたリストを形成します)。1 回の Send() 呼び出しで、少なくとも 8 つのファイルの情報を送信できる可能性があります。これにより、合計 send() 呼び出しが最大 13 に減るはずです。

したがって、基本的に send() 経由でリンクされたリストを送信する方法はありますか?? 代わりの方法があれば教えてください。

4

3 に答える 3

1

良い質問!そのために+1。

しかし、Winsock を使用するためのコードを本当に書きたい、または書く必要があるのでしょうか? そうするのには十分な理由があります - それが楽しいことと挑戦であることを含めて。しかし、必要がない場合は、無料でマルチプラットフォーム (もちろん win32 を含む) であるlibcurl ftp ライブラリの使用を検討することをお勧めします。

于 2011-09-17T09:35:20.270 に答える
0

FTPでこれを行うために私が知っている唯一の方法は、FTPサーバーへの複数の接続を使用することです。これがサーバーによって許可されている場合、完全なフォルダーツリーを一覧表示するために必要な多くのプロトコル交換を並行して実行できるため、一覧のパフォーマンスが向上する可能性があります。

Rgds、マーティン

于 2011-09-17T10:37:59.943 に答える
0

TCP はバイト ストリームです。送信するアイテムの数と、必要なsend()(または) への呼び出しの数との間に 1 対 1 の関係があるという保証はありません。recv()それは単に TCP の仕組みではありません。必要な方法でデータをフォーマットし、send()すべてのデータが送信されたことを通知されるまで呼び出しを続けます。

FTP に関しては、RFC 959およびRFC 3659を​​読んで、ftp プロトコルが実際にどのように機能するかを確認してください。MLSTおよびMLSDコマンドが導入される前は、ディレクトリ リストには標準化された形式がありませんでした。FTP サーバーは、必要なフォーマットを自由に使用できました。dir多くのサーバーは、OS 自体またはlistコマンドから生データをパイプするだけです。たとえば、 Indyの FTP クライアントには、非標準のディレクトリ リストを処理するための数十個のパーサーが含まれています。

于 2011-09-17T16:50:10.680 に答える