Triangle Project
Sample Code
for Visual Basic.net

 トップページへ戻る

Visual Basic .net で作成した FTPサーバーのコード

作成中・・・・・・・ソースは肥満でスパゲッティーです。
tps20050814.lzh / .net
かろうじて動く程度です。
クライアント毎に個別のスレッドを立ち上げるタイプでのサーバー、FTPサーバーの基本機能を組み込み。
作動確認のテストには NextFTP4 を使わさせて頂いてます。
複数のクライアントによる負荷テストは1,000クライアントまで実施済。

UTF-8文字コードの取り扱いを追加実装。
コマンドコネクションで流れるディレクトリー名、ファイル名に付いて、UTF-8コードでの受け入れ送出が出来るようにした。テキストファイルはイメージ(バイナリーモード)のまま転送受信するか、一行ずつのテキスト(テキストモード)として転送受信するか選択できる。テキストモードの時は文字コードをUTF-8文字コードで転送受信するか、デフォルト(シフトJIS)で転送受信するかを選択できる。

細かな検証、複数のクライアントソフトでの検証はこれからです。サーバーの設定項目でコードに未実装の物が有ります、今後実装していく予定です。

下記のコマンドを認識します。(*印 は実装していません)
  USER  PASS  ACCT* CWD   XCWD  CDUP  XCUP  SMNT*
  QUIT  REIN  PORT  PASV  TYPE  STRU  MODE  RETR
  STOR  STOU* APPE  ALLO* REST  RNFR  RNTO  ABOR
  DELE  MDTM  RMD   XRMD  MKD   XMKD  PWD   XPWD
  SIZE  LIST  NLST  FEAT  OPTS* MLST  MLSD  AUTH*
  SITE* SYST* STAT* HELP  NOOP
拡張コマンドで対応可能なものは今後実装するつもり。

Visual Basic .net で作成した FTPサーバー関連のTips
スケルトンモデル
tps20041219.lzh / .net
クライアント毎に個別のスレッドを立ち上げるタイプでのサーバーモデル。セッション管理テーブル、メンバー管理テーブル、アイドルタイムアウトを組み込み。メンバー管理UI,サーバー設定UIを追加。
負荷テスト用のプロジェクトを同梱。テストはクライアントを順番に接続して行き、全てが接続を完了すると、一斉に送受信を行う方法でテスト。クライアントの数として1000まで挙動を確認した。
tps20040821.lzh / .net
MSDNの"非同期サーバー ソケットの例"に有るサンプルコードで、どの程度のパフォーマンスかをテストするプロジェクト。コードはMSDNそのままである。負荷テスト用のプロジェクトを同梱。
ソケット
tps20050731.lzh / .net
FTPで使用するデーターコネクション用ソケットの実験プロジェクト。リッスンタイムアウト、コネクトタイムアウト、ファイル転送タイムアウト、転送データー量の制御(バイト/秒)、レジューム対応,を組み込み。
テキストモードでは、保存テキストファイルの文字コードを判定して任意の文字コードにて送信する、任意の文字コードにて受信し、任意の文字コードにてテキスト保存する機能を実装。
tps20040613.lzh / .net
非同期サーバーソケットの実験コード。
サーバーのスケルトンモデルと成る。チャットクライアントとの組み合わせでテスト。
tps20040530.lzh / .net
非同期ソケットによるシングルサービスソケットの実験コード。
チャットサーバーとクライアントへの実装実験。ステータス情報の扱いを少し変更。
tps20040529.lzh / .net
非同期ソケットによるファイル転送の実験コード。
シングルサービスのソケットで、ファイル転送専用です。ソケットは非同期作動、ファイルアクセスは同期アクセスです。ファイルアクセスはSystem.IO.FileStreamを同期モードで使用した。転送の開始は接続の完了、転送の完了はSender側のクローズ。
ファイルアクセスにタイムアウトを追加。
tps20040118.lzh / .net
非同期ソケットによるコネクション終了シーケンスの実験コード。
ソケットの参考書に有る、コネクション終了シーケンス(正しくクローズする)を実験する為に各ステップを単独で操作出来る様にし、Toolソフトで各ソケット・パケットの状態を確認した。
Tips
tps20050904.lzh / .net
正しいファイルパス文字列を取得する,大文字小文字を意識しないパス文字列を実際のパス文字列に変換する。全角空白文字にも対応。
実際パス "D:\FtpRoot\taro\test\ \ withspace \a\ taro.txt "
入力パス "d:\ftproot\TARO\test\ \ withspace \A\ TARO.txt "
出力パス "D:\FtpRoot\taro\test\ \ withspace \a\ taro.txt "
tps20050703.lzh / .net
文字コードの判定とUTF8へ変換する時の長さの取得
<重要>この機能の重要なロジックは http://dobon.net/ 「メールマガジン dotnet43.txt 文字コードを判別するには?」に依存しています。必ず原典を参照してください。
ハードディスク上のファイルをネットワーク上にUTF-8コードで送出する場合に必要な情報を入手する為にこのルーチンを作成。
tps20050607.lzh / .net
文字コード関連の検証プロジェクト
デフォルトエンコーディングを調べる、'システムが、リトル エンディアンかビッグ エンディアンかを調べる、文字コード番号を調べる、コードを変換する、各国文字の表示、文字コードを指定して読み取る、ファイルの文字コードを変換する、ディレクトリー・ファイル名に各国語を使う。
tps20050718.lzh / .net
BinaryFirstInFirstOut(FIFO)
バイトデータを蓄積する。バイト配列からデーターを切り出す。
蓄積データーから指定バイト数を読み出し、先頭切り詰めを行う。
蓄積データーからCRLFを区切りとした文書一行分に相当するバイトデーターを読み出し、先頭切り詰めを行う。
tps20050530.lzh / .net
バイトデータを操作するユーティリティー
1.バイトデータを蓄積する、バイト配列からデーターを切り出す。
2.バイト配列をバッキング ストアとして使用する。
3.MemoryStream クラスをバッキング ストアとして使用する。
4.バイトデーターをビット表示する。 バイトデーターのビットの並びを反転する。
tps20040919.lzh / .net
ArrayListの実験コード。ArrayListの操作関数を共有メッソドとしてクラスにパッケージした。更に共有メッソドにはMonitorによるロック機構を組み込み。
'テストはスレッドを多数立ち上げ一斉に共有メソッドにアクセスするようにした。800スレッドでの一斉アクセスまでテスト確認した。
tpsRandomizer01.lzh / .net
乱数発生ルーチンの実験。暗号化に使用する厳密なランダムバイトを作成する方法と通常の乱数発生方法をビジュアルにプロットし比較した。
tpsFileAccess01.lzh / .net
System.IO.FileStream を使用したファイルアクセスの実験プロジェクト。3種類の小さなプロジェクトのパッケージ
1.ファイルを排他処理してオープン
2.ファイルへ同期アクセスして、転送
3.ファイルへ非同期アクセスして、転送

重 要:
各種参考資料、ウエブ上でのサンプルコードを参考に個人の理解を深める為、作動確認をする為に作成した実験のためのコードであり、他の著作権を侵害するものではありません。
万一、コードの部分的にでも著作権を主張される方がいらっしゃれば、その方の主張を尊重いたします。

コード全体としてはTriangle Projectが著作権の主張を致します。
皆さんが個人で参考にされる場合は自由にお使い下さい。
転載される場合はご連絡をお願いします。
Triangle Projectでは実行ファイルの配布は予定しておりません。全てコードのみの配布となります。

Triangle Project Sample Code の使用は使用する人の責任・リスクの元に行なって下さい。
Triangle Project Sample Code の使用に起因する有形無形対人対物を含むあらゆる事故に対してTriangle Projectは責任を持ちません。

 トップページへ戻る