SophiaFramework UNIVERSE 5.3 |
ネットワークアドレス(ドメイン名、IP アドレス、ポート番号)管理用のクラスとして、 以下の 2 種類のクラスがあります。
表 16.1. ネットワークアドレス管理クラス
クラス名 | 解説 |
---|---|
SFXInetAddress | ドメイン名や IP アドレスを管理するためのクラスです。 ドメイン名の解決(IP アドレスの解決)を行う機能も提供します。 |
SFXSocketAddress | ドメイン名や、IP アドレス、ポート番号を管理するためのクラスです。 SFXInetAddress クラスを継承します。 |
注意事項 | |
---|---|
SFXTCPSocket / SFXSSLSocket / SFXUDPSocket クラスでは、 ドメイン名の解決は自動的に行われます。 |
mif ファイルの特権設定 | |
---|---|
ネットワーク機能を利用するには、 mif ファイルの特権レベル設定で「ネットワーク」の項目をオンにする必要があります。 |
ドメイン名や、IP アドレス、ポート番号は、SFXInetAddress::Set / SFXSocketAddress::Set 関数、 またはSFXInetAddress::SFXInetAddress / SFXSocketAddress::SFXSocketAddress コンストラクタで設定します。
SFXAnsiString 文字列のアドレスを設定する場合、 以下の書式で指定します。
<プロトコル> :// <ドメイン名> : <ポート番号> / <パス>
または
<アカウント> @ <ドメイン名>
アドレスの書式 | |
---|---|
SFXInetAddress クラスの場合、ドメイン名以外は省略可能です。 アドレスに含まれるドメイン名だけが抜き出されて設定されます。 SFXSocketAddress クラスの場合、ドメイン名以外は省略可能です。 アドレスに含まれるドメイン名と、もしあれば、ポート番号(省略時は "0")が抜き出されて設定されます。 |
SFXTCPSocket / SFXSSLSocket / SFXUDPSocket クラスでソケット通信を行う場合、 SFXSocketAddress 型のソケットアドレスを渡すと、 ドメイン名は自動的に解決されます。
注意 | |
---|---|
SFXTCPSocket / SFXSSLSocket / SFXUDPSocket クラスを利用してソケット通信を行う場合、 SFXSocketAddress 型のソケットアドレス(ドメイン名とポート番号)を渡せばドメイン名は自動的に解決されます。 そのため、通常、以下に述べる「手動によるドメイン名解決」は不要です。 |
手動でドメイン名を解決するには、 SFXInetAddress::Resolve 関数を呼び出します。 ドメイン名解決の結果は、この関数の引数に指定したコールバック関数に通知されます。 コールバック関数が呼び出されるまでに、 SFXInetAddress::Cancel 関数を呼び出すことによりドメイン名の解決をキャンセルできます。
ドメイン名が解決した IP アドレスは、 SFXInetAddress::GetIP / SFXInetAddress::AsINAddr 関数を使用して取得します。
複数の IP アドレスに変換された場合は、 SFXInetAddress::GetIP / SFXInetAddress::AsINAddr 関数の引数にインデックスを指定することにより、すべての IP アドレスを取得することが可能です。 IP アドレスの総数は、SFXInetAddress::GetCount 関数で取得できます。
IP アドレスを設定した場合 | |
---|---|
IP アドレスが設定されている場合、または ドメイン名が "nnn.nnn.nnn.nnn" (nnn: 数字) の形式で設定されている場合は、 SFXInetAddress::Resolve 関数を呼び出してドメイン名を解決する必要はありません。 |
例 16.4. 手動によるドメイン名解決
// コールバック関数で使うので、SFXSocketAddress インスタンスはクラスのメンバ変数として定義する class MyClass { private: SFXSocketAddress _address; public: Void Start(Void); XALLBACK_DECLARE_SFXSOCKETADDRESS(ResolveCallback); }; Void MyClass::Start(Void) { SFCError error; // ドメイン名とポート番号を設定する if ((error = _address.Set("www.example.com:80")) == SFERR_NO_ERROR) { // ドメイン名を解決する (ドメイン名が解決すると、ResolveCallback 関数が呼び出される) error = _address.Resolve(XALLBACK_INTERNAL(ResolveCallback)); } if (error != SFERR_NO_ERROR) { // エラーが発生したとき(コールバック関数は呼ばれない) ... } } // ドメイン名解決の完了が通知されるがコールバック関数 XALLBACK_IMPLEMENT_SFXSOCKETADDRESS(MyClass, ResolveCallback, error) { SFXAnsiString ip; SInt32 i; if (error == SFERR_NO_ERROR) { // ドメイン名とポート番号をデバッグウィンドウに表示する TRACE("%s", _address.Get().GetCString()); // ドメイン名とポート番号 TRACE("%s", _address.GetHost().GetCString()); // ドメイン名 TRACE("%s", _address.GetPort().GetCString()); // ポート番号 // IP アドレスの個数分繰り返す for (i = 0; i < _address.GetCount(); ++i) { // IP アドレスを取得し、デバッグウィンドウに表示する ip = _address.GetIP(i); TRACE("%s", ip.GetCString()); } } else { // エラーが発生したとき ... } }
SFXSocketAddress インスタンスの解放 | |
---|---|
コールバック関数が呼び出される前に、 SFXSocketAddress インスタンスが解放されると正しく動作しません。 |
コールバック関数の第 1 引数 | |
---|---|
SFXInetAddress::Resolve 関数は、 内部で BREW API INETMGR_GetHostByName 関数を呼び出します。 BREW API INETMGR_GetHostByName 関数の呼び出しに伴うエラー値は、 コールバック関数の第 1 引数に渡されます。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |