- PR -

c#:SocketでのFTP通信について

1
投稿者投稿内容
けい
会議室デビュー日: 2009/03/05
投稿数: 3
投稿日時: 2009-03-05 18:22
いつも参考にさせていただいています。初めて投稿します。

以下現象で困っています。

使用言語:VisualStudio2005 C#(CompactFramework2.0)
CASIOのD-5200で実行しています。
FTPはSocket

ループで連続でFTPのGetを実行すると
>ftpRecvSocket.Connect(ep);
で「対象のコンピュータによって拒否されたため、接続できませんでした。」
とエラー表示される。
以下ロジックの一部抜粋
IPEndPoint ep = null;
Socket ftpRecvSocket = null;
ftpRecvSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ep = new IPEndPoint(IPAddress.Parse(ipAddress), portNumber);
ftpRecvSocket.Connect(ep);

ファイルサーバー側のnetstatで確認するとエラーが発生している場合
一覧に表示されません。
正常に接続される場合は一覧に出てきます。

発生するファイル、取得回数目が毎回違うことと、PDA上からではなく、Framework2.0
でも同様に発生するのでFTPサーバー側なのかと予想していますが原因がわかりません。
 ※サーバー側のウィルスバスターは切ってあります。
何か解決する方法ありませんでしょうか?
CompactFramework2.0でもTCPClientが使えることを知らずにSocketで作成していましたが
TCPClientで作成しなおしてみようとは思いますが、根本の原因がわからないので
何かヒントをいただけませんか?

処理概要は
FTP接続
LOGIN→GET→GET・・・→切断
GETはループで繰り返し実行

以下命令と返答のログ
返答220 Microsoft FTP Service
命令:USER YYYY
返答331 Password required for tlds37.
命令:PASS PPPP
返答230 User YYYY logged in.
命令:TYPE I
命令:PASV
返答200 Type set to I.
命令:RETR 01.xml
返答125 Data connection already open; Transfer starting.
返答226 Transfer complete.
命令:PASV
返答200 Type set to I.
命令:RETR 02.xml
返答125 Data connection already open; Transfer starting.
返答226 Transfer complete.
命令:PASV
返答200 Type set to I.
命令:RETR 03.xml
返答125 Data connection already open; Transfer starting.
返答226 Transfer complete.
命令:PASV
返答200 Type set to I.
命令:RETR 04.xml
返答125 Data connection already open; Transfer starting.
返答226 Transfer complete.
命令:PASV
返答200 Type set to I.
命令:RETR 05.xml
返答125 Data connection already open; Transfer starting.
返答226 Transfer complete.
命令:PASV
返答200 Type set to I.
対象のコンピュータによって拒否されたため、接続できませんでした。
命令:RETR 06.xml
返答425 Can't open data connection.
06.xmlダウンロード失敗
命令:PASV
返答200 Type set to I.
命令:RETR 07.xml
返答125 Data connection already open; Transfer starting.
返答226 Transfer complete.
命令:QUIT

Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2009-03-06 11:04
こんにちは。

引用:

けいさんの書き込み (2009-03-05 18:22) より:
CASIOのD-5200で実行しています。


もしかして"DT-5200"の間違いでしょうか?
http://casio.jp/ht/dt5200/

引用:

>ftpRecvSocket.Connect(ep);
で「対象のコンピュータによって拒否されたため、接続できませんでした。」


passiveモードのデータコネクションのことでしょうか?

引用:

命令:PASV
返答200 Type set to I.
対象のコンピュータによって拒否されたため、接続できませんでした。
命令:RETR 06.xml
返答425 Can't open data connection.
06.xmlダウンロード失敗



なぜ拒否されるのかは分からないですが、(ファイアウォールは完全に無効?)
データコネクションが特定のポートのときだけ接続が拒否されているということですよね?

拒否されたときは、もう一度PASVを送ってで別ポートにてリトライすれば良いのでは?
けい
会議室デビュー日: 2009/03/05
投稿数: 3
投稿日時: 2009-03-06 13:15
返答ありがとうございます。
DT-5200の間違いでした。

確かにエラーが発生した場合リトライするべきですね。

ただネットワークについての知識が不足しているため
結構な頻度で拒否されるため、FTPとはエラーがよく出るものなのか
それともエラーがよく発生することが異常なのか不明であったため
質問をいたしました。
けい
会議室デビュー日: 2009/03/05
投稿数: 3
投稿日時: 2009-03-06 13:34
ファイアーウォール、ウィルスバスター等は外しています。
marun
常連さん
会議室デビュー日: 2007/07/19
投稿数: 22
投稿日時: 2009-03-06 19:34
「対象のコンピュータによって拒否された」のとおり
一定時間経過したらファイルサーバ側が切る設定とかはないですか
1

スキルアップ/キャリアアップ(JOB@IT)