ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

ホスト名からIPアドレスを取得する

バージョン 4.0 以降

ホスト名からIPアドレスを取得するには SFXSocketAddress クラスの SFXSocketAddress::Resolve 関数を使用します。
この関数が呼び出されるとネットワーク通信を行い、通信完了後にコールバックとして
登録された関数が呼び出されます。

SFMTYPEDEFCLASS(MyClass)
class MyClass {
private:
    SFXSocketAddress _address;
public:
    Void Function(Void);
    CALLBACK_DECLARE_SFXSOCKETADDRESS(ResolveCallback)
};

Void MyClass::Function(Void)
{
    _address.Set("www.example.com:80");
    
    // ホスト名を解決する (要エラーチェック)
    _address.Resolve(CALLBACK_FUNCTION(ResolveCallback));
}

// ホスト名が解決できたときに呼び出されるコールバック
CALLBACK_IMPLEMENT_SFXSOCKETADDRESS(MyClass, ResolveCallback, error)
{
    SInt32 i;
    for (i = 0; i < _address.GetCount(); ++i) {
        SFXAnsiString string = _address.GetIP(i); // IP アドレスを文字列として取得
    }
}

バージョン 3.0

ホスト名からIPアドレスを取得するには SFUHostResolver クラスを使用します。
この関数が呼び出されるとネットワーク通信を行い、通信完了後にコールバックとして
登録された関数が呼び出されます。

SFMTYPEDEFCLASS(MyClass)
class MyClass {
private:
    SFUHostResolverPtr _resolver;
public:
    Void Function(Void);
    static Void NotifyResolvingSHP(SFCError error, SFUHostResolverRef resolver, 
                               VoidPtr data);
    Void NotifyResolving(SFCError error, SFUHostResolverRef resolver);
};

Void MyClass::Function(Void)  // この関数の中でIPアドレスを取得する
{
    // コンストラクタでコールバック関数を取得
    _resolver = new SFUHostResolver(NotifyResolvingSHP, this);
    // ホスト名を解決 (要エラーチェック)
    _resolver->Resolve("www.example.com");
}

// ホスト名が解決できたときに呼び出されるコールバック
static Void MyClass::NotifyResolvingSHP(SFCError error, SFUHostResolverRef resolver, 
                               VoidPtr data)
{
    static_cast(data)->NotifyResolving(error, resolver);
}

// コールバックの実装
Void MyClass::NotifyResolving(SFCError error, SFUHostResolverRef resolver)
{
    SInt32 i;
    // GetResolvedCount 関数で取得したIPアドレスの個数を取得
    for (i = 0; i < resolver.GetResolvedCount(); ++i) {
        // GetResolvedAddress でIPアドレスを取得し、SFUIPEndpoint 型に変換
        SFUIPEndpoint address(resolver.GetResolvedAddress(i));

    }
    delete &resolver;
}

参照 SFXSocketAddress::Set | SFXSocketAddress::Resolve |
SFXSocketAddress::GetCount | SFXSocketAddress::GetIP