前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1

16.1. ネットワーク アドレス管理

ネットワーク アドレス(IP アドレス、ドメイン、ポート番号)を管理するクラスは 2 種類あります。

表 16.1. ネットワーク アドレス管理クラス

クラス名 解説
SFXInetAddress IP アドレス、ドメインを管理するためのクラスです。
SFXSocketAddress IP アドレス、ドメイン、ポート番号を管理するためのクラスです。

手動でドメインを解決するには、SFXInetAddress::Resolve 関数を使います。

[Caution] mif ファイルの特権設定

mif ファイルの特権レベル設定で「ネットワーク」の項目をオンにします。

例 16.1. 定義

SFXSocketAddress address1("127.0.0.1");          // IP アドレス ( ポート番号は 0 になる )
SFXSocketAddress address2("127.0.0.1:80");       // IP アドレスとポート番号
SFXSocketAddress address3("www.example.com:80"); // ドメインとポート番号
SFXSocketAddress address4("www.example.com", 80); // ドメインとポート番号

例 16.2. アドレスの設定

SFXSocketAddress address;

address.Set("www.example.com:80"); 
address.Set("http://www.example.com:80/dir1/dir2/index.html");
address.Set("http://user@127.0.0.1:80/dir1/");

SFXSocketAddress::Set 関数 またはコンストラクタの引数に与える文字列には様々な書式を指定できます ( ドメインとポート番号以外は無視されます )。

例 16.3. アドレスの設定: TCP 通信の場合

// エラー処理は省略
SFXSocketAddress address("www.example.com:80");

SFXTCPSocket _socket;

// 初期処理
_socket.Open();

// 引数に SFXSocketAddress 型のドメインを渡すことで、自動的にアドレス解決する
_socket.Connect(address, CALLBACK_FUNCTION(OnConnect));

SFXTCPSocket クラスで TCP 通信をする場合、SFXSocketAddress でドメイン名を設定すると自動的にアドレス解決されます。

例 16.4. ドメインを解決する方法

// コールバック関数で使うので、SFXSocketAddress インスタンスはクラスのメンバ変数として定義する
class MyClass {
private:
    SFXSocketAddress _address;
public:
    Void Start(Void);
    CALLBACK_DECLARE_SFXSOCKETADDRESS(ResolveCallback);
};

Void MyClass::Start(Void)
{
    SFCError error;

    // ドメインとポート番号を設定する
    if ((error = _address.Set("www.example.com:80")) == SFERR_NO_ERROR) {
        // ドメインを解決する ( ドメインが解決すると、ResolveCallback 関数が呼び出される )
        error = _address.Resolve(CALLBACK_FUNCTION(ResolveCallback));
    }
    if (error != SFERR_NO_ERROR) {
        // エラー処理(コールバック関数は呼ばれない)
        ...
    }
}

// コールバック関数の実装
CALLBACK_IMPLEMENT_SFXSOCKETADDRESS(MyClass, ResolveCallback, error)
{
    SFXAnsiString ip;
    SInt32 i;

    for (i = 0; i < _address.GetCount(); ++i) {
        ip = _address.GetIP(i); // 結果の取得
        TRACE("%s",ip.GetCString()); // 結果の表示
    }
}

Resolve の結果、複数の IP アドレスに変換されるので、インデックスを指定して取得します。

[Caution] SFXSocketAddress クラスのインスタンス

コールバックが呼び出される前に SFXSocketAddress クラスのインスタンスが解放されると正しく動作しません。