前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXSocketAddress
IP アドレス、ドメイン名、ポート番号を管理するためのクラスです。
#include <SFXSocketAddress.h.hpp>
class SFXSocketAddress : public SFXInetAddress;
SFMTYPEDEFCLASS(SFXSocketAddress)

継承図

SFXSocketAddress クラスの継承図

協調図

SFXSocketAddress クラスの協調図

解説

SFXSocketAddress は、ドメイン名やIP アドレス、ポート番号を管理するためのクラスです。 このクラスは、SFXInetAddress クラスを継承します。

使用方法

  1. SFXSocketAddress::SFXSocketAddress コンストラクタ、または SFXSocketAddress::Set 関数でドメイン名とポート番号を含むアドレスを設定します。
  2. SFXInetAddress::Resolve 関数でドメイン名の解決を行います。 この関数の引数には、ドメイン名解決の結果が通知されるコールバック関数を指定します。
  3. SFXInetAddress::Cancel 関数を呼び出すことにより、 ドメイン名の解決をキャンセルすることも可能です。
  4. ドメイン名の解決が終了すると、2. で登録したコールバック関数が呼び出されます。
  5. コールバック関数内でドメイン名の解決後の処理を行います。
[Note] 注意

SFXSocketAddress::SFXSocketAddress コンストラクタ、または SFXSocketAddress::Set 関数で IP アドレスを指定する場合は、 SFXInetAddress::Resolve 関数によるドメイン名の解決は不要です。

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

class MyClass {
    SFXSocketAddress _socket;
    Void Function(Void);
    XALLBACK_DECLARE_SFXINETADDRESS(ResolveCallback)
};

Void MyClass::Function(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) {

        // エラーが発生したとき、ResolveCallback 関数は呼び出されない
        ...
    }
}

// ドメイン名解決の結果が通知されるコールバック関数
XALLBACK_IMPLEMENT_SFXSOCKETADDRESS(MyClass, ResolveCallback, error)
{
     SInt16 i;

    if (error == SFERR_NO_ERROR) {

        // ドメイン名とポート番号をデバッグウィンドウに表示する
        TRACE("%s", _socket.Get().GetCString());      // ドメイン名とポート番号
        TRACE("%s", _socket.GetHost().GetCString());  // ドメイン名
        TRACE("%s", _socket.GetPort().GetCString());  // ポート番号
     
        // ドメイン名解決の結果である IP アドレスをデバッグウィンドウに表示する
        for(i = 0 ; i < _socket.GetCount() ; i++){

            // i 番目の IP アドレスをデバッグウィンドウに表示する
            TRACE("%s", _socket.GetIP(i).GetCString());
        }
    } else {

        // エラーが発生したとき
        ...
    }
}

SFXTCPSocket / SFXSSLSocket / SFXUDPSocket クラスでソケット通信を行う場合、 SFXSocketAddress クラスのアドレスを渡すと、 ドメイン名は自動的に解決されます。

例 853. 自動的なドメイン名の解決: TCP 通信の場合

// アドレス(ドメイン名とポート番号)の設定
SFXSocketAddress address("www.example.com:80");

SFXTCPSocket _socket;

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

// 引数に SFXSocketAddress 型のアドレス(ドメイン名とポート番号)を渡すことで、ドメイン名は自動的に解決される
_socket.Connect(address, XALLBACK_INTERNAL(OnConnect));

参照

SFXTCPSocket | SFXSSLSocket | SFXUDPSocket | SFXInetAddress

メンバ

コンストラクタ/デストラクタ
SFXSocketAddress( Void )
SFXSocketAddress クラスのコンストラクタです。
SFXSocketAddress( SFXSocketAddressConstRef param )
SFXSocketAddress クラスのコンストラクタです。
SFXSocketAddress( SFXAnsiStringConstRef param )
SFXSocketAddress クラスのコンストラクタです。
SFXSocketAddress( SFXInetAddressConstRef host , UInt16 port )
SFXSocketAddress クラスのコンストラクタです。
SFXSocketAddress( SFXAnsiStringConstRef host , UInt16 port )
SFXSocketAddress クラスのコンストラクタです。
SFXSocketAddress( INAddr inaddr , INPort inport )
SFXSocketAddress クラスのコンストラクタです。
パブリック関数
INPort AsINPort( Void )
ポート番号を取得します。
Void Clear( Void )
IP アドレスやドメイン名、ポート番号の設定をクリアします。
static
SFXSocketAddressConstRef
EmptyInstance( Void )
空のアドレスを取得します。
SFXAnsiString Get( Void )
SFXAnsiString 型のドメイン名とポート番号を取得します。
SFXAnsiStringConstRef GetHost( Void )
ドメイン名を取得します。
UInt16 GetPort( Void )
ポート番号を取得します。
SFCError Set( SFXSocketAddressConstRef param )
ドメイン名や IP アドレス、ポート番号を設定します。
SFCError Set( SFXAnsiStringConstRef param )
ドメイン名や IP アドレス、ポート番号を設定します。
SFCError Set( SFXInetAddressConstRef host , UInt16 port )
ドメイン名や IP アドレス、ポート番号を設定します。
SFCError Set( SFXAnsiStringConstRef host , UInt16 port )
ドメイン名や IP アドレス、ポート番号を設定します。
SFCError Set( INAddr inaddr , INPort inport )
ドメイン名や IP アドレス、ポート番号を設定します。
SFCError SetHost( SFXInetAddressConstRef param )
ドメイン名を設定します。
SFCError SetHost( SFXAnsiStringConstRef param )
ドメイン名を設定します。
Void SetPort( UInt16 param )
ポート番号を設定します。
SFXSocketAddressRef operator=( SFXSocketAddressConstRef param )
SFXSocketAddress 型のアドレスを代入します。
static
SFXInetAddress
AnyInetAddress( Void ) (SFXInetAddress から継承)
SFXInetAddress 型の INADDR_ANY を取得します。
INAddr AsINAddr( SInt16 index = 0 ) (SFXInetAddress から継承)
IP アドレスを取得します。
Void Cancel( Void ) (SFXInetAddress から継承)
ドメイン名の解決をキャンセルします。
SInt16 GetCount( Void ) (SFXInetAddress から継承)
IP アドレスの個数を取得します。
SFXAnsiString GetIP( SInt16 index = 0 ) (SFXInetAddress から継承)
IP アドレスを取得します。
static
SFXInetAddress
LocalInetAddress( Void ) (SFXInetAddress から継承)
ローカルホストまたはデバイスの IP アドレスを取得します。
static
SFXInetAddress
LoopbackInetAddress( Void ) (SFXInetAddress から継承)
ループバックアドレスを取得します。
SFCError Resolve( CallbackSPP spp , VoidPtr reference ) (SFXInetAddress から継承)
ドメイン名を解決します。
CallbackSPP (SFXInetAddress から継承)
アドレス解決の結果が通知されるコールバック関数の型です。

SFXSocketAddress::SFXSocketAddress
SFXSocketAddress クラスのコンストラクタです。
[ public, explicit ]
SFXSocketAddress(Void);
[ public ]
SFXSocketAddress(
    SFXSocketAddressConstRef param   // 元になる SFXSocketAddress
);
[ public, explicit ]
SFXSocketAddress(
    SFXAnsiStringConstRef param   // ドメイン名とポート番号の文字列
);
[ public, explicit ]
SFXSocketAddress(
    SFXInetAddressConstRef host   // 元になる SFXInetAddress
    UInt16 port                   // ポート番号
);
[ public, explicit ]
SFXSocketAddress(
    SFXAnsiStringConstRef host   // ドメイン名文字列
    UInt16 port                  // ポート番号
);
[ public, explicit ]
SFXSocketAddress(
    INAddr inaddr   // IP アドレス
    INPort inport   // ポート番号
);

解説

ドメイン名や IP アドレス、ポート番号がこのコンストラクタの引数に指定された場合は、 内部で SFXSocketAddress::Set 関数を呼び出してこのオブジェクトにドメイン名や IP アドレス、ポート番号を設定します。

そうでない場合は、このコンストラクタは何も行いません。

参照

SFXSocketAddress::Set


SFXSocketAddress::AsINPort
ポート番号を取得します。
[ public, const ]
INPort AsINPort(Void);

戻り値

INPort 形式のポート番号を返します。

解説

この関数は、このオブジェクトに設定されたポート番号を INPort 型で取得します。

[Note] 注意

BREW API INPort 型は、以下のように定義されます。

typedef uint16 INPort;

参照

SFXSocketAddress::GetPort | SFXSocketAddress::Set | SFXSocketAddress::SetPort | SFXSocketAddress::SFXSocketAddress | BREW API INPort


SFXSocketAddress::Clear
IP アドレスやドメイン名、ポート番号の設定をクリアします。
[ public ]
Void Clear(Void);

解説

この関数は、SFXInetAddress::Cancel 関数を呼び出して SFXInetAddress::Resolve 関数のドメイン名の解決をキャンセルし、 SFXSocketAddress::Set / SFXSocketAddress::SetHost / SFXSocketAddress::SetPort 関数や SFXSocketAddress::SFXSocketAddress コンストラクタによる IP アドレスやドメイン名、ポート番号の設定をクリアします。

参照

SFXSocketAddress::Set | SFXSocketAddress::SetHost | SFXSocketAddress::SetPort | SFXSocketAddress::SFXSocketAddress | SFXInetAddress::Cancel | SFXInetAddress::Resolve


SFXSocketAddress::EmptyInstance
空のアドレスを取得します。
[ public, static ]
SFXSocketAddressConstRef EmptyInstance(Void);

戻り値

空のアドレス

解説

この関数は、SFXSocketAddress 型の空のアドレスを取得します。

[Tip] Tip
関数の戻り値として空のアドレスへの参照を返すときに使います。

SFXSocketAddress::Get
SFXAnsiString 型のドメイン名とポート番号を取得します。
[ public, const ]
SFXAnsiString Get(Void);

戻り値

"ドメイン名" + ":" + "ポート番号" (SFXAnsiString)

解説

この関数は、このオブジェクトに設定されているドメイン名とポート番号を SFXAnsiString 型の文字列("ドメイン名" + ":" + "ポート番号")として取得します。

[Note] 注意

SFXSocketAddress::SFXSocketAddressコンストラクタ、 またはSFXSocketAddress::Set 関数で BREW API INAddr 型の IP アドレスが設定された場合は、 IP アドレスを "nnn.nnn.nnn.nnn" (nnn: 数字) の書式の SFXAnsiString 文字列に変換し、それをドメイン名として返します。

参照

SFXSocketAddress::Set | SFXSocketAddress::SetHost | SFXSocketAddress::SFXSocketAddress | SFXSocketAddress::operator= | SFXSocketAddress::GetHost | SFXSocketAddress::GetPort | SFXInetAddress::GetIP | SFXAnsiString | BREW API INAddr


SFXSocketAddress::GetHost
ドメイン名を取得します。
[ public, const ]
SFXAnsiStringConstRef GetHost(Void);

戻り値

ドメイン名(SFXAnsiString)

解説

この関数は、このオブジェクトに設定されているドメイン名を SFXAnsiString 型の文字列として取得します。

[Tip] Tip
この関数は、SFXInetAddress::Get 関数と同等です。

参照

SFXSocketAddress::SetHost SFXSocketAddress::Set | SFXSocketAddress::SFXSocketAddress | SFXSocketAddress::Get | SFXSocketAddress::GetPort | SFXInetAddress::Get | SFXInetAddress::GetIP | SFXAnsiString


SFXSocketAddress::GetPort
ポート番号を取得します。
[ public, const ]
UInt16 GetPort(Void);

戻り値

ポート番号(UInt16 型)

解説

この関数は、このオブジェクトに設定されているポート番号を UInt16 型の整数として取得します。

参照

SFXSocketAddress::SetPort | SFXSocketAddress::AsINPort | SFXSocketAddress::Get | SFXSocketAddress::GetHost | SFXInetAddress::GetIP | SFXSocketAddress::Set | SFXSocketAddress::SFXSocketAddress


SFXSocketAddress::Set
ドメイン名や IP アドレス、ポート番号を設定します。
[ public ]
SFCError Set(
    SFXSocketAddressConstRef param   // 元になる SFXSocketAddress
);
[ public ]
SFCError Set(
    SFXAnsiStringConstRef param   // ドメイン名とポート番号の文字列
);
[ public ]
SFCError Set(
    SFXInetAddressConstRef host   // 元になる SFXInetAddress
    UInt16 port                   // ポート番号
);
[ public ]
SFCError Set(
    SFXAnsiStringConstRef host   // ドメイン名文字列
    UInt16 port                  // ポート番号
);
[ public ]
SFCError Set(
    INAddr inaddr   // IP アドレス
    INPort inport   // ポート番号
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、このオブジェクトに IP アドレスやドメイン名、ポート番号を設定します。

設定した IP アドレスや、ドメイン名、ポート番号は、 SFXSocketAddress::Get 関数により取得できます。 また、ドメイン名、ポート番号は、 それぞれ SFXSocketAddress::GetHost 関数、 SFXSocketAddress::GetPort 関数により取得できます。

引数が SFXAnsiString 文字列の場合、 以下の書式の文字列を指定することが可能であり、 この書式の文字列からドメイン名とポート番号(省略時は "0")が抜き出されて設定されます。

<プロトコル> :// <ドメイン名> : <ポート番号> / <パス>  

または

<アカウント> @ <ドメイン名>

引数の SFXAnsiString 文字列に含まれる <ドメイン名> が "nnn.nnn.nnn.nnn" (nnn: 数字) の形式である場合、 または 引数が BREW API INAddr 型の IP アドレスの場合、 IP アドレスを取得するために SFXInetAddress::Resolve 関数を呼び出す必要はありません。 この場合、ドメイン名を解決することなく、IP アドレスは SFXInetAddress::AsINAddr / SFXInetAddress::GetIP 関数により取得できます。

[Caution] 注意

この関数は、内部で最初に SFXInetAddress::Cancel 関数を呼び出します。

そのため、Resolve 中(SFXInetAddress::Resolve 関数を呼び出してからコールバック関数に結果が通知されるまで)に この関数を呼び出した場合、Resolve(ドメイン名の解決)はキャンセルされます。

使用例

SFXSocketAddress address;
SFXAnsiString    domain, host, port;

address.Set("http://www.example.com:80/test");

domain = address.Get();     // ドメイン名とポート番号("www.example.com:80")を取得する 
host   = address.GetHost(); // ドメイン名("www.example.com")を取得する 
port   = address.GetPort(); // ポート番号("80")を取得する 
SFXSocketAddress address;
INAddr         ipaddress_INAddr;
INPort         port_INPort;
SFXAnsiString  ipaddress_SFXAnsiString;


address.Set("127.0.0.1/test", 80);

ipaddress_INAddr        = address.AsINAddr(); // IP アドレス("127.0.0.1")を INAddr 型で取得する 
inport_INPort           = address.AsINPort(); // ポート番号("80")を INPort 型で取得する 
ipaddress_SFXAnsiString = address.GetIP();    // IP アドレス("127.0.0.1") を SFXAnsiString 型で取得する

参照

SFXSocketAddress::Get | SFXSocketAddress::GetHost | SFXSocketAddress::GetPort | SFXSocketAddress::AsINPort | SFXSocketAddress::SetHost | SFXSocketAddress::SetPort | SFXSocketAddress::operator= | SFXSocketAddress::Clear | SFXInetAddress::Cancel | SFXInetAddress::SFXInetAddress | SFXInetAddress::GetIP | SFXInetAddress::AsINAddr | SFXInetAddress::Resolve | SFXAnsiString | BREW API INAddr


SFXSocketAddress::SetHost
ドメイン名を設定します。
[ public ]
SFCError SetHost(
    SFXInetAddressConstRef param   // 元になる SFXInetAddress
);
[ public ]
SFCError SetHost(
    SFXAnsiStringConstRef param   // ドメイン名
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、内部で SFXInetAddress::Set 関数を呼び出して引数に指定されたドメイン名を設定します。

[Tip] Tip

この関数は、SFXInetAddress::Set 関数と同等です。

[Note] 注意

ドメイン名は、SFXSocketAddress::Set 関数や SFXSocketAddress::SFXSocketAddress コンストラクタでも指定できます。

参照

SFXSocketAddress::GetHost | SFXSocketAddress::Set | SFXSocketAddress::SFXSocketAddress | SFXInetAddress::Set


SFXSocketAddress::SetPort
ポート番号を設定します。
[ public ]
Void SetPort(
    UInt16 param   // ポート番号
);

解説

この関数は、このオブジェクトに引数に指定されたポート番号を設定します。

デフォルト値: 0

[Note] 注意

ポート番号は、SFXSocketAddress::Set 関数や SFXSocketAddress::SFXSocketAddress コンストラクタでも指定できます。

参照

SFXSocketAddress::GetPort | SFXSocketAddress::Set | SFXSocketAddress::SFXSocketAddress | SFXSocketAddress::SetHost


SFXSocketAddress::operator=
SFXSocketAddress 型のアドレスを代入します。
[ public ]
SFXSocketAddressRef operator=(
    SFXSocketAddressConstRef param   // 元になる SFXSocketAddress
);

解説

このオペレーターは、指定された SFXSocketAddress 型のアドレスを入します。

参照

SFXSocketAddress::Set