【TKFP】ReceiveDataLengthの値 |
- 日時: 2011/02/19 11:46
- 名前: FM
- TKFP 1.4.1を使用しています。
ソース付きのものをDLしてそれを元に「転送中の経過を表示する」のサンプルを参考に送受信のサイズから転送中の%を計算しようとしています。
送信の場合はSendDataLengthとファイルのサイズがイコールになって問題ないのですが、受信の場合にReceiveDataLengthが正しい数値がとれません。
20kbくらいのファイルを受信すると転送が完了しても Receive : 2048byteと同じ数字しか取得できません。数10MBのファイルの場合は値が変化しますが数万バイト以上の差異がでています。 FtpClient.ReceiveBufferSize = 1としてもイコールになりません。
ファイル転送の確認はイベントハンドラからフォームに表示を行い確認しています。
取得の方法に問題があるのでしょうか?
開発 Windows7 ftpサーバ Windows7 SSL不使用 unix形式 C#2010 .net 3.5
/// <summary> /// FTPクライアントクラス /// </summary> private TKFP.Net.FtpClient FtpClient; private void button1_Click(object sender, EventArgs e) { TKFP.Net.BasicFtpLogon bp = new TKFP.Net.BasicFtpLogon(id, pass); //POPクライアントクラスの定義 FtpClient = new TKFP.Net.FtpClient(bp, "192.168.0.2", 21); //パッシブモードに設定 FtpClient.ConnectionMode = TKFP.Net.ConnectionModes.Passive; //リストの取得コマンドを設定 FtpClient.ListType = TKFP.Net.ListType.LIST;
//LIST情報の解析クラスを指定 FtpClient.ListDataLoader = new TKFP.IO.UnixListDataLoader(); //標準のFTP(デフォルト)
//モニタ表示のために送受信イベントを登録 FtpClient.MessageReceive += new TKFP.Net.MessageReceiveHandler(FtpClient_MessageReceive); FtpClient.MessageSend += new TKFP.Net.MessageSendHandler(FtpClient_MessageSend);
//接続開始 if (!FtpClient.Connect()) { toolStripStatusLabel1.Text = "接続失敗"; FtpClient.Close(); FtpClient = null; return; } else { //通信量を表示するために新しいスレッド実行します new System.Threading.Thread(new System.Threading.ThreadStart(Monitor)).Start(); toolStripStatusLabel1.Text = "接続成功"; if (FtpClient.IsEncrypted) { toolStripStatusLabel1.Text += " (暗号化)"; }
//サーバーに作成するファイル情報のインスタンスを作成します TKFP.IO.FileInfo file = new TKFP.IO.FileInfo(FtpClient, "/test/a.txt"); file.TransferType = TKFP.Net.TransferTypes.BINARY; file.WriteTo(@"d:\a.txt"); } }
//データの転送量を表示するメソッド //別スレッドで実行します private void Monitor() { //モニタ終了のシグナルをFTPの切断にしています while (FtpClient.Connected) { //現在の送信量と受信量をコンソールに表示します System.Console.WriteLine("Send : {0}byte Receive : {1}byte", FtpClient.SendDataLength, FtpClient.ReceiveDataLength); } }
|
|