ソケットを取り扱うのにお手軽な良いクラスライブラリがないため、
にある、
http://www.naughter.com/w3mfc.html
を使わせていただく方針を決めました。ここのソースは何年も前に見つけて、チェックだけしていたのですが、自分のC++プログラミング技術などの不足のため、指をなめていたのです。
で、実際の中身ですが、
なかなかよさそうです。OpenSSLへの対応はまだビルドしていないことと、鍵の作り方解らないんで(汗)放置しています。
あと、SEC_E_OKとかのシンボルの出所がどうしてもわからず、困ったのと、sspi関係でごにょごにょしないと、リンクが通らないことが面倒でした。
#SEC_E_OK関係は、PlatformSDKあたりで見つけたのですが、そっちを参照してくれません。
#SSPIは「使わない」シンボル定義をしておけばとりあえずリンク通ります。(何が使えなくなるのかもわからず)
ちょっとしたWebサーバを作ってみてたい向きにはちょうど良いくらいの規模ではないかと思います。
Webサーバ自体の運用をしてみたい人は
AN HTTPD
http://www.st.rim.or.jp/~nakata/
で充分と思ってます。ただしこっちはSSL未対応。仮の対応方法はあり(stoneを使う)ますが・・・
ソケットプログラミングについてはいろいろと調べて、実験しました。自分で一から書くつもりだったからです。ですが、通信関係のフリーソフトなどを触っていると、やっぱりソケット周りの処理の甘さが原因?という不具合が多いので、自分で書いたソースはほとんど捨てました・・・・そしてまたごみになるわけですが。
あと書いていて気づいたことを書き留めておきます。
「お手軽ファイル転送」はみんながFTPサーバとFTPクライアントを使いこなせる状況では全く持って用を成しません。もちろんそうはならないと考えているから作っているわけです。
FTPをSSH経由でセキュアに、かつ転送の中断・再開に対応させるには既存ツールの組み合わせでできることなのかもしれません。それは充分踏まえた上で今後も進めていきます。
フレッツなどでよく使われている(と思われる)フリーのPPPoEツールRASPPPoEです。
FAQ2
とのことなので、これはクライアントだけでなく、サーバ側でも動作するんでないか?と考えてやってみました。
環境など:
クライアント側の設定法などについては、付属のReadmeで充分ですし、日本語による解説のページもやまほどあるので、そちらを参照すればOK。
サーバ側も、クライアント側と同じように、RASPPPoEをインストール(というか設定)してから、「ネットワークとダイヤルアップ接続」の「新しい接続の作成」で起動する「ネットワークの接続ウィザード」で「着信接続を受け付ける」で、RASPPPoEの仮想モデムを指定するだけです。
動作確認は、クライアント側で、RASPPPoEプロトコル以外のTCP/IPなどを全て殺した状態で、おこないました。普通につながります。
RASPPPoEがダイアルアップ接続上でも使えれば、VPNサーバがなくても、外出先から常時接続の宅内マシンへ接続できたりするのですが・・・(ちょっと怖いのでやってません)・・・
考えられる用途としては、PPPoE不要の常時接続環境同士をRASPPPoEでつないでしまえば、見かけ上LAN間接続になりますね。セキュリティは甘甘でしょうが。
喩えで考えると、メールが郵便だとすると、ファイルサーバは倉庫です。
お手軽ファイル転送は、宅配便のようなものかもしれません。
現実世界でもトランクルームや貸し倉庫などはあります。しかし個人で利用している人は少ないのではないでしょうか。私は利用していますが。
インターネット上にもファイルサーバサービスは数多くありますが、使い勝手が悪いです。
例:
確かにFTPサーバを公開すれば良いだけなのかもしれません。ですが、
というようなことを考慮すると、宅配便のような
みたいなサービスがインターネット上にあっても良いのではないかと思います。
極端な話、一般に使われるメールサーバがもっと大容量のメールに対応してくれれば、それで済みます。もちろんメーラー(MUA)も中断・再開に対応してくれないと話になりません。
WebDAVなどが、もっと一般的になってくれば、それでも良いのかもしれません。しかし世の中のWebサーバやプロキシソフトが拡張HTTPに対応してくれるのには相当の時間がかかりそうです。
さて、ネット宅配便に必要な要素は
くらいで良いでしょうか。
アップロードは、HTTPによるものと、専用クライアントソフトに対応します。専用クライアントではアップロード処理のキュー・中断・再開に対応すればかなり便利でしょう。
ダウンロードはファイルサーバがWebサーバとして動作し、受け取り主はワンタイムパスワードでダウンロードできるようにすれば、一般的なダウンロードツールで中断・再開などに対応できます。もちろん専用クライアントによるダウンロードのキュー・中断・再開に対応しておくべきでしょう。
世の中のブロードバンド化がもう少し進み、ファイルサーバに使用するHDDが大容量化すれば、OS再インストール時のバックアップなどにも使えるかもしれません。自分自身宛にHDDの中身を丸ごと送りつけるわけです。
Vectorにこういうのがありました。
「速達(ファイル転送ツール TCP/IP経由で接続したPCへファイルを一括送信)」
いいですねぇ。
フォルダをまるごと指定しておくと、スキューで知らない間に転送してくれます。
あとは、
くらいで欲しいツールの完成。
ソケット通信の実装は実は非常に厄介です。例えば,
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
の情報からスタートして,やりたいことを実現するまでには遠い遠い道のりがあります。また,Windowsに限ればWinsok2の魅力的な関数群にも食指が伸びてしまい,ついつい寄り道が増えてしまいます。TransmitFile()とか。
ソケット通信ができたからといって,HTTPがすぐにしゃべれるわけでもありません。
HTTPでトンネルでも掘ろう(SSLポートをだまして使うstone方式ではなくて)とするなら,サーバにも一工夫が必要です。まさか有名どころのWebサーバ+CGIではパフォーマンスも出ないし,mod,isapi,servletの書き方や環境に合わせて作ることになってしまいます。そんなことを日曜大工でやりたくないので,ぐだらぐだらとライブラリ探しをするわけです。
今日は
http://www.nullsoft.com/free/jnetlib/
を見つけました。Winampでいつもお世話になっているNullSoftのオープンソースです。ありがたや〜
特徴としては,
で,「実用第一」のもよう。もちろん,base64/urlエンコードもついてます。日本語対応では苦労するかもしれませんが,実装全体がごくシンプルなので,よい感じです。
ブロードバンドになって通信速度が速くなっても、ファイル転送に失敗はつきものです。
ダウンロードだけならダウンローダー?では途中でこけても、勝手にうまい具合に再開してくれるので、構いません。
でかいメールの送信や、IMを使ったファイル送信では、低速回線ではショック大です。
しかも、そんなに急いでいないファイルの送受信に、通信帯域を取られるのもちょっと癪ですね。
ですので、ファイルをちょびっとずつ送受信してくれるツールを作ることにしました。
ファイルを分割してメールで送るのと、やることは何ら変わりません。
でも、ファイルを圧縮したり、分割したり、受け取ってから結合したりするのが手作業なので嫌なんです。
大体の方針:
リンク
ネットフォルダ
ほとんどこれで充分なんですが、送受信の中断・再開ができないと困るですよ。
宅ファイル便(2003.12.14追加)
アップロードはHTTP。プロキシ経由だと実用性低い・・・
プロジェクトうぐぅ〜秋子さん
http://hp.vector.co.jp/authors/VA023898/akiko.html
たぶん、これに近いものを作ってしまうことになるのでしょう。でも防火壁越えはしません。