前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1
SFXSocketAddress
IP アドレス、ドメイン、ポート番号を管理するためのクラスです。
#include <SFXSocketAddress.h.hpp>
class SFXSocketAddress : public SFXInetAddress;
SFMTYPEDEFCLASS(SFXSocketAddress)

継承図

SFXSocketAddress クラスの継承図

協調図

SFXSocketAddress クラスの協調図

解説

IP アドレスとドメインを管理する SFXInetAddress を継承しています。

SFXSocketAddress クラスでドメインを設定し、 SFXTCPSocket クラスの SFXTCPSocket::Connect 関数に渡すことで、SFXTCPSocket クラスがアドレスを解決します。

使用方法

  1. コンストラクタ、または、SFXSocketAddress::Set 関数でドメインを設定します。
  2. SFXInetAddress::Resolve 関数でドメインの解決を行います。引数でコールバック関数を登録します。
  3. ドメインの解決が終了すると、登録したコールバック関数が呼び出されます。
  4. コールバック関数内で処理を行います。

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

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

Void MyClass::Function(Void)
{
    SFCError error;
    
    // ドメインとポート番号を設定する
    if ((error = _address.Set("www.example.com:80")) == SFERR_NO_ERROR) {
        // ドメインを解決する ( 解決完了はコールバックで通知される )
        error = _address.Resolve(CALLBACK_FUNCTION(ResolveCallback));
    }
    if (error != SFERR_NO_ERROR) {
        // コールバックが返らないので、ここでエラー処理をする
    }
}

// コールバック関数
CALLBACK_IMPLEMENT_SFXSOCKETADDRESS(MyClass, ResolveCallback, error)
{
     SInt16 i;

     // 結果の取得
     TRACE("%s",_socket.Get().GetCString());  // ドメインとポート番号
     TRACE("%s",_socket.GetHost().GetCString());  // ドメイン
     TRACE("%s",_socket.GetPort().GetCString());  // ポート番号
     
      // IP アドレスの個数を繰り返す
     for(i = 0 ; i < _socket.GetCount() ; i++){
         // 結果の取得
         TRACE("%s",_socket.GetIP(i).GetCString());  // IP アドレス
     }
    
}

参照

SFXTCPSocket | SFXInetAddress

メンバ

コンストラクタ/デストラクタ
SFXSocketAddress( Void )
SFXSocketAddress( SFXSocketAddressConstRef param )
SFXSocketAddress( SFXAnsiStringConstRef param )
SFXSocketAddress( SFXInetAddressConstRef host , UInt16 port )
SFXSocketAddress( SFXAnsiStringConstRef host , UInt16 port )
SFXSocketAddress( INAddr inaddr , INPort inport )
SFXSocketAddress クラスのコンストラクタです。
パブリック関数
INPort AsINPort( Void )
ポート番号を INPort 形式に変換します。
Void Clear( Void )
IP アドレスとポート番号を空にします。
static
SFXSocketAddressConstRef
EmptyInstance( Void )
空のアドレスを取得します。
SFXAnsiString Get( Void )
ドメインとポート番号を文字列として取得します。
SFXAnsiStringConstRef GetHost( Void )
ドメインを取得します。
UInt16 GetPort( Void )
ポート番号を取得します。
SFCError Set( SFXSocketAddressConstRef param )
Set( INAddr inaddr , INPort inport )
Set( SFXAnsiStringConstRef host , UInt16 port )
Set( SFXInetAddressConstRef host , UInt16 port )
Set( SFXAnsiStringConstRef param )
ドメインや IP アドレス、ポート番号を設定します。
SFCError SetHost( SFXInetAddressConstRef param )
SetHost( SFXAnsiStringConstRef param )
ドメイン名を設定します。
Void SetPort( UInt16 param )
ポート番号を設定します。
SFXSocketAddressRef operator=( SFXSocketAddressConstRef param )
ドメインや IP アドレス、ポート番号を代入します。
static
SFXInetAddress
AnyInetAddress( Void ) (SFXInetAddress から継承)
SFXInetAddress 形式の Any アドレスに変換します。
INAddr AsINAddr( SInt16 index = 0 ) (SFXInetAddress から継承)
IP アドレスを INAddr 形式に変換します。
Void Cancel( Void ) (SFXInetAddress から継承)
IP アドレスの解決をキャンセルします。
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   // ポート番号
);

解説

引数が SFXAnsiString の場合、ドメイン文字列としては以下の書式に対応しています。

<protocol> :// <account>  @ <domain>  : <port> / <path>  

この文字列 (一部欠けていても可) が与えられると、<domain> の部分をドメインとして、<port> の部分をポート番号として取り出して設定します (ポート番号を引数で指定した場合はそちらを優先)。

<domain> の部分が IP アドレス ("nnn.nnn.nnn.nnn" という文字列) の場合、自動的に SFXInetAddress::AsINAddr 関数で取得できます。

参照

SFXSocketAddress::Set | SFXSocketAddress::operator=


SFXSocketAddress::AsINPort
ポート番号を INPort 形式に変換します。
[ public, const ]
INPort AsINPort(Void);

戻り値

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

参照

SFXSocketAddress::GetPort


SFXSocketAddress::Clear
IP アドレスとポート番号を空にします。
[ public ]
Void Clear(Void);

参照

SFXSocketAddress::Set


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

戻り値

SFXSocketAddress 型の空のアドレスを返します。


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

戻り値

ドメイン名 + ":" + ポート番号の文字列を返します。

参照

SFXSocketAddress::GetHost | SFXSocketAddress::GetPort | SFXInetAddress::GetIP


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

参照

SFXSocketAddress::Get | SFXSocketAddress::GetPort SFXInetAddress::GetIP


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

参照

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


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
  • IP アドレスがないとき : SFERR_INVALID_PARAM
  • IP アドレスもしくはポート番号が変換できないとき : SFERR_FAILED
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

ドメイン文字列は以下の書式に対応しています。

<protocol> :// <account>  @ <domain>  : <port> / <path>  

このような文字列 (一部欠けていても可) が与えられると、<domain> の部分をドメインとして、<port> の部分をポート番号として取り出して設定します (ポート番号を引数で指定した場合はそちらを優先)。

<domain> の部分が IP アドレス ("nnn.nnn.nnn.nnn" という文字列) の場合、自動的に SFXInetAddress::AsINAddr 関数で取得できるようになります。

Resolve 中に SFXSocketAddress::Set 関数を呼び出した場合はキャンセルされます。

使用例

SFXSocketAddress address;
address.Set("http://www.example.com:80/test");
address.GetHost(); // "www.example.com" を返す 
address.GetPort(); // 80 を返す 
address.Get();     // "www.example.com:80" を返す 
SFXSocketAddress address;
address.Set("127.0.0.1/test", 80);
address.AsINAddr(); // 127.0.0.1 を INAddr 形式で返す 
address.AsINPort(); // 80 を INPort 形式で返す 

参照

SFXSocketAddress::operator= | SFXInetAddress::AsINAddr | SFXInetAddress::Resolve


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

戻り値

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

解説

SFXInetAddress::Set 関数と同等です。

参照

SFXInetAddress::Set


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

参照

SFXSocketAddress::Set | SFXSocketAddress::SetHost


SFXSocketAddress::operator=
ドメインや IP アドレス、ポート番号を代入します。
[ public ]
SFXSocketAddressRef operator=(
    SFXSocketAddressConstRef param   // 元になる SFXSocketAddress
);

解説

ドメインの文字列は以下の書式に対応しています。

<protocol> :// <account>  @ <domain>  : <port> / <path>  

このような文字列 (一部欠けていても可) が与えられると、<domain> の部分をドメインとして、<port> の部分をポート番号として取り出して設定します (ポート番号を引数で指定した場合はそちらを優先)。

<domain> の部分が IP アドレス ("nnn.nnn.nnn.nnn" という文字列) の場合、自動的に SFXInetAddress::AsINAddr 関数で取得できるようになります。

Resolve 中にこの関数を呼び出した場合はキャンセルされます。

参照

SFXSocketAddress::Set