- - PR -
.Net C#でSolarisからFTP(ソースを訂正しました)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-06-15 22:42
みなさまはじめまして。
少し困った現象が起きているので、相談させてください。 現在、あるシステムにて.Net C#で作成したAPLより Solaris2.7のサーバに対してFTP接続を行い、ファイルをGETしています。 このたび、そのSolarisサーバがバージョンアップ(5.9)したところ 突然FTPによるGETが出来なくなってしまいました。 (APLからのGETが出来ないだけで、コマンドプロンプトなど手動ではGET可能) 順を追って見るとどうも下記部分でループを抜けていないようです。 Solaris2.7と5.9ではftpdの挙動が若干違うらしいのですが 原因がつかめません。何かおわかりの方がいらっしゃったらお知恵を貸してください。 private ResponseDescription ReceiveCommandResponse() { ResponseDescription resp_desc = new ResponseDescription(); int StatusCode = 0; String StatusDescription = null; bool bCompleteResponse=false; if( m_ControlSocket == null ) { throw new ApplicationException( "コネクションは開かれていません。" ); } MemoryStream responseStream = new MemoryStream(); while( true ) { int BufferSize = 256; Byte[] recvbuffer = new Byte[ BufferSize + 1 ]; int bytesread = 0; recvbuffer[0] = ( Byte )'\0'; bytesread = m_ControlSocket.Receive( recvbuffer, BufferSize, 0 ); //どうも↑で処理が止まっている模様 if( bytesread <= 0 ) { break; } responseStream.Write( recvbuffer, 0, bytesread ); String szResponse = Encoding.ASCII.GetString( recvbuffer, 0, bytesread ); m_sbControlSocketLog.Append( szResponse ); bCompleteResponse = IsCompleteResponse( responseStream ); if( bCompleteResponse ) { break; } [ メッセージ編集済み 編集者: DAMAGE 編集日時 2005-06-15 23:21 ] |
|
投稿日時: 2005-06-16 20:53
自己レスです。
どうやら、FTPのGET自体はうまく出来ていて、下記問題部分で 「226 Transfer Complete」 というレスポンスがうまく受け取れないようです。 (逆にいうとそれまでのレスポンスはうまく受け取れています) 手動にてFTPした場合は、ちゃんと上記文言が返ってきます。 どなたかお知恵を貸してください。 |
|
投稿日時: 2005-06-16 22:20
今日は
症状を見ると、この前のコマンドが適切に出されていないような気がします。(RETR等、サーバーのResponceに適切な応答をしていないような気がします) Sockの同期処理でControlチャンネルの通信をしているみたいですが、Receiveで止まるという事は、適切なコマンド送られていないと思います。 リストを見るとSoketのlogもとられて居るみたいですので、そのlogで直前までの流れを確認してみら良いと思います。 ちなみに同期処理でlockするのがいやなら、AvailableでReceiveできるか確認し、Timeoutなどを設けてエラーを出せば良いと思います。 |
|
投稿日時: 2005-06-16 23:27
お返事ありがとうございます。
ご指摘の通り、ためしにm_ControlSocket.Availableを拾ってみたところ 案の定"0"でした。 しかし、直前のレスポンスでもSocketのAvailableが"0"の個所があり そちらはなぜかブロックされずにうまく処理されています。 Availableが"0"にもかかわらずReceiveできるなんて事はありえるのでしょうか? |
|
投稿日時: 2005-06-17 04:46
今日は
試してませんが、Blockingはどうなっていますか?。 falseの時は Availableが"0"でもReceiveでブロックしないとなって今が。 それから、FTPサーバーのバージョンを変更してからの現象と言う事であれば明らかに FTPサーバーより以前と違ったAnswerを返していると思いますが、パケットモニータなどで確認した方が良いと思います。FTPサーバーは人間向けのメーセージもよく返して来ますので。 |
1