EternalWindows
RAS / インターネットへの接続

現在、インターネットの接続方法として常時接続が盛んになっていますが、 この常時接続という言葉は、元はダイヤルアップ接続と対比されて生まれた言葉でした。 ダイヤルアップ接続とは、必要なときだけインターネットに接続する方法で、 通信媒体としては主に電話回線が利用されることになります。 ダイヤル、つまり電話回線を介してデータを送受信するという仕組み上、 専用線等を用いる常時接続と比べ通信速度が落ちる傾向にありますが、 インターネットで得られるサービス自体に差が生じるようなことはないため、 一度接続を終えれば、どのような接続方法を取ったかは重要ではありません。

ネットワークアプリケーションの視点から見た場合、 そのコンピュータがインターネットに接続しているかどうかは非常に重要な事柄です。 可能であればアプリケーションは、インターネットに接続されているかどうかを確認し、 接続されていないのであれば接続を促すインターフェースを表示したいところですが、 幸いにも接続の種類に関しては特に意識する必要はありません。 後述するInternetGoOnlineという関数を呼び出せば、 LAN接続がある場合はオンラインにするかどうかの確認が行われ、 そうでない場合は、ダイヤルアップ用のダイアログが表示されるからです。 ただし、アプリケーションが暗黙的にダイヤルを行いたいような場合は、 ダイヤルアップ接続用の関数を呼び出すことになります。

実のところ、Windowsにはダイヤルアップ接続用の関数というのは存在しません。 本章で取り上げるRAS(Remote Access Service)は、あくまでクライアントコンピュータを リモートコンピュータに接続させる(ログオンさせる)ことが目的であって、 それ以上の用途は基本的にはないと考えてよいでしょう。 ただ、このリモートコンピュータがプロバイダのアクセスポイントとなれば、 それを経由することでインターネットに接続できることになり、 プロバイダへの接続や切断はRAS関数を必要に応じて呼ぶことになるわけですから、 結果的にRASがダイヤルアップ接続に適しているということになるのです。 なお、RASはVPNサーバーへの接続のサポートも行っており、 呼び出す関数を変更することなくVPNサーバーへの接続を行うことができます。

WinINetによるインターネットの接続

WinINetは、FTPサーバーやHTTPサーバーへのアクセスを簡易化した関数群で、 これに併せてインターネットへの接続やURLの整形などもサポートしています。 WinINetにはダイアルアップ用の関数も用意されているので、 RASによるダイヤルアップが煩わしい場合は、これらの関数が呼び出すとよいでしょう。 次に示すInternetGoOnlineは、インターネットに接続するWinINet関数です。

InternetGoOnline(szUrl, NULL, 0);

第1引数は、接続するURLのアドレスを指定します。 第2引数は、ダイヤルアップ接続用のダイアログが表示されるときに 親ウインドウとするハンドルを指定しますが、NULLでも構いません。 第3引数は、予約されているため0を指定します。 戻り値がERROR_SUCCESSであれば、インターネットへオンライン接続されたことになります。

RASがインターネットへ接続したらゴールなのに対してWinINetは、 インターネットへ接続してから何か行うという関数なので、 WinINetでHTTPサーバーからデータを取得するようなアプリケーションは、 仮にダイヤルアップ接続しか許可されない場合でも、RASでのダイヤル避けるべきでしょう。 このような場合は、WinINetのInternetAutodialでダイヤルすべきです。

InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE, NULL);

第1引数は、INTERNET_AUTODIAL_FORCE_ONLINEという定数を指定します。 第2引数は親ウインドウのハンドルですが、NULLを指定しても問題ありません。 アプリケーションが終了する際には、InternetAutodialHangupを呼び出します。

InternetAutodialHangup(0);

WinINetにはRASのダイヤル方法に近い、InternetDialという関数も用意されています。 この関数は、第2引数にRASで言うところのエントリ名を受け取り、 第4引数に確立された接続に関連する値を返します。

InternetDial(NULL, TEXT("EntryName"), INTERNET_DIAL_UNATTENDED, &dwConnection, 0);

第3引数にINTERNET_AUTODIAL_FORCE_ONLINEを指定した場合、 この関数はダイアログを表示せずにダイヤルを試行し、 それ以外の定数を指定した場合は第1引数を親ウインドウとしてダイアログを表示します。 第5引数は予約されているため0を指定します。 確立された接続は、InternetHangUpで切断することになります。

InternetHangUp(dwConnection, 0);

第1引数は、InternetDialで取得した第4引数の値を指定します。 第2引数は予約されているため、0を指定します。 なお、WinINetを利用する場合は、wininet.hのインクルードとwininet.libへのリンクが必要になります。



戻る