ホスト名から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