いわゆるメッセンジャソフトには MirandaIM とゆーのを使ってるのだが, これも含めて,どーもファイル転送がうまいこといかん場合が多いのですよ. 基本的には port ひとつ開けりゃいいだけなはずなのに, なんかエラー出るとどっちの設定が? とかクローンじゃなく純正なら? とか激しく面倒.
ってことで,Windows プログラミングの勉強も兼ねて, C# で自作してみることにしました. 名前は「Linet」.port 開けて,起動しといて, 相手のアドレス指定してファイルぶっ込めば転送される,みたいのを目指して.
プロトコルはオリジナルで「SFBP」ってのを作りました. HTTP とか使って転送しちゃえば早いだろーとか思ったんだけど, C# で簡単に HTTP サーバを作る方法が見つからなかったし, 後で機能を追加したりするのが面倒になるかもーとか思ったんで.
ちなみに現在は,「相手を指定してファイルを送るとダイアログも何もなく黙って C: の root にファイルが作成される」 というとてもイヤな仕様で動作しておりますw
今後実装したい機能を列挙しとこう.
- 転送中のダイアログ(送受信両方)
- ダイアログのデフォルト最小化
- 「最小化時に隠す」設定
- 最小化で起動
- ていうかそもそもオプション設定ダイアログ
- 指定以上のファイルを受信する時には確認を求める or 断る
- ディスク空き容量が指定以下の時には(ry
- ファイルをドロップするとただちに転送開始
- フォルダごと転送
- 全ての転送の一覧
- 転送の暗号化
- リバース転送
- ユーザ認証
リバース転送は,ポート開けれない環境に対してファイルを送る時のための機能. A と B の 2環境があり,B がポート開けれない環境で,A→B のファイル転送を行なう場合,
- A 上で B 宛てのリバース転送待機指定を行なう.
- A の Linet は B から SFBP RECV メッセージが来るのを待つ.
- B 上で A 宛てのリバース転送要求を行なう.
- B の Linet は A 宛てに SFBP RECV メッセージを発行.
- RECV を受けた A の Linet は,その接続を使用してファイルを転送する.
なんか思いつきで書いてるから後で変える事になりそうな気もするが, まぁ気にしないぞイエー. ユーザ認証が出来たら,あるユーザに対して公開しとくファイル,みたいのを設定できるようにして, UI 的には「サーバのファイル一覧から持ってくる」みたいな動作が出来るといいな.