The project of U-WA-
http://uwa.potetihouse.com/
戻る
TKFP.DLL   プログラミングTips

複数のインスタンスで待ち受けポートを共有する

 FTPプロトコルではデータの通信時に新しいコネクションでデータの送受信を行うという特徴があります。(※参考) このため、Activeモードでの通信を行う場合は、クライアント側でデータコネクション用の待ち受けポートを準備する必要があります。 単一の接続で使用する場合は、特に問題となりませんが、複数の接続で平行して処理を行う場合は準備する待ち受けポートを確保するときに、注意する必要があります。
 TKFP.Net.PortEntryクラスは指定された範囲で順番に使用可能な待ち受けポートを提供するクラスです。TKFP.Net.FtpClientクラスのインスタンスを作成するときに、 特に指定しない場合は、内部で自動的にTKFP.Net.PortEntryクラスを作成していますが、この方法で複数の接続を行った場合、ポートの確保で衝突が起こり片方の接続が、待ち受けポートの確保に失敗する可能性があります。 複数のTKFP.Net.FtpClientクラスを同時に使用する場合は、インスタンスの作成時に共通のTKFP.Net.PortEntryインスタンスを引数とすることで、待ち受けポートの衝突を回避することが可能です。
C#.NET
//接続情報
string server = "ftp.example.jp";
string userid = "userid";
string pass = "pass";

//ログオン用のクラスを作成
TKFP.Net.IFtpLogon logon = new TKFP.Net.BasicFtpLogon(userid, pass);

//待ち受けポート生成クラス
TKFP.Net.PortEntry portentry = new TKFP.Net.PortEntry(5000, 10000);


//FTPクライアントクラス1の作成
TKFP.Net.FtpClient ftp1 = new TKFP.Net.FtpClient(logon, server, 21, portentry);
//接続開始
if (ftp1.Connect())
{
    System.Windows.Forms.MessageBox.Show("FTP1:接続成功");
}
else
{
    System.Windows.Forms.MessageBox.Show("FTP1:接続失敗");
}

//FTPクライアントクラス2の作成
TKFP.Net.FtpClient ftp2 = new TKFP.Net.FtpClient(logon, server, 21, portentry);
//接続開始
if (ftp2.Connect())
{
    System.Windows.Forms.MessageBox.Show("FTP2:接続成功");
}
else
{
    System.Windows.Forms.MessageBox.Show("FTP2:接続失敗");
}

//切断
ftp1.Close();
ftp2.Close();
VB.NET
'接続情報
Dim server As String = "ftp.example.jp"
Dim userid As String = "userid"
Dim pass As String = "pass"

'ログオン用のクラスを作成
Dim logon As New TKFP.Net.BasicFtpLogon(userid, pass)

'待ち受けポート生成クラス
Dim portentry As New TKFP.Net.PortEntry(5000, 10000)


'FTPクライアントクラス1の作成
Dim ftp1 As New TKFP.Net.FtpClient(logon, server, 21, portentry)
'接続開始
If ftp1.Connect() Then
    System.Windows.Forms.MessageBox.Show("FTP1:接続成功")
Else
    System.Windows.Forms.MessageBox.Show("FTP1:接続失敗")
End If

'FTPクライアントクラス2の作成
Dim ftp2 As New TKFP.Net.FtpClient(logon, server, 21, portentry)
'接続開始
If ftp2.Connect() Then
    System.Windows.Forms.MessageBox.Show("FTP2:接続成功")
Else
    System.Windows.Forms.MessageBox.Show("FTP2:接続失敗")
End If

'切断
ftp1.Close()
ftp2.Close()
VB.NETのコードはC#.NETを元に「C#.NET to VB.NET Translator」によって作成したものです

トップページへ移動
The project of U-WA-
http://uwa.potetihouse.com/