2011-09-17 17 views
2

私はWindowsのC言語でクライアントサーバープログラムを書こうとしています。目的はサーバーからディレクトリリストを受け取ることです。今私はほとんどのリソースを利用するような方法でクライアント - サーバーを開発しようとしていました。サーバ上のファイルを一覧表示するためのFTPクライアントプログラムを作成する最良の方法は?

実装する方法の1つは、サーバーが単一のファイルの情報を送信するために単一のsend()呼び出しを行うことです。したがって、100のファイルがある場合、100回の呼び出しを行います。しかし、私はそのネットワークリソースの無駄を感じています。私が知る限り、ウィンドウ内のsend()またはrecv()のバッファサイズは8kbです。しかし、1つのファイルの情報はほとんど1kbになりません。だから、複数のファイル情報を送るためにsend()を呼び出す方法があります(ファイル情報は構造体に格納されていますので、基本的にリンクリストを作成します)。私は1つのSend()コールでatleast 8ファイルの情報を送ることができるかもしれません。それは最大send()呼び出しを最大13に減らすはずです。

したがって、基本的にsend()経由でリンクリストを送信する方法はありますか?あなたが他の方法を考えることができるかどうか私に教えてください。

答えて

1

良い質問!それに対して+1。

しかし、Winsockを使用するにはコードを作成する必要がありますか?そうするべき十分な理由があります - それは楽しいことと挑戦です。しかし、必要がない場合は、フリーでマルチプラットフォーム(もちろんwin32を含む)のlibcurl ftp libraryを使用することを検討したいと思うかもしれませんし、ちょうどうまく動作し、仕事を楽にするかもしれません。

+0

ありがとうございますが、私はwinsockを使ってコードを書く必要があります。実際に私が開発しているアプリケーションの一部です。したがって、この方向のアイデアは役に立ちます。 – Shanty

+0

もう一度この死んだ馬を打ち負かすために、libcurlは実際にwinsockを使用します。 libcurlは詳細を処理します。あなたはそれをwinsockのラッパーと考えるかもしれません。 –

0

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

RGDS、 マーティン

0

TCPはバイトストリームです。送信するアイテムの数と、send()(またはrecv())への通話回数との間に1対1の関係があるという保証はありません。これは単にTCPの仕組みではありません。必要に応じてデータを書式設定し、すべてのデータが送信されるまで、send()を呼び出し続けます。

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

関連する問題