前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXUDPSocket
UDP ソケット通信のためのクラスです。
#include <SFXUDPSocket.h.hpp>
class SFXUDPSocket : public SFXStorage;
SFMTYPEDEFCLASS(SFXUDPSocket)

解説

SFXUDPSocket クラスは、 UDP クライアント、またはUDP サーバーを実装するための機能を提供します。

このクラスでは、ストリームを利用してデータ送受信することはできません。 SFXUDPSocket::Send / SFXUDPSocket::Receive 関数を呼び出してデータを送受信します。

[Note] 注意

SFXUDPSocket クラスは、 BREW API の ISocket インターフェースをカプセル化し、 ハイレベルな UDP ソケット通信機能を提供します。

UDP クライアントの実装

UDP クライアントは、 SFXUDPSocket クラスを使用して以下の手順で実装します。

  1. UDP ソケット(SFXUDPSocket インスタンス)を作成します。
  2. SFXUDPSocket::Open 関数を呼び出して、 UDP ソケットを開きます。
  3. 必要に応じて SFXUDPSocket::Bind 関数を呼び出して、ローカル の IP アドレスとポート番号を UDP ソケットにバインドします。 省略時は、デフォルトのポート番号がバインドされます。
  4. SFXUDPSocket::Send 関数を呼び出して、指定した送信先(UDP サーバー)の IP アドレスとポート番号へ UDP ソケット経由でデータを送信します。
  5. SFXUDPSocket::Close 関数を呼び出して、UDP ソケットを閉じます。
[Note] 注意

UDP ソケットからデータを受信するには、 ローカル の IP アドレスとポート番号を UDP ソケットにバインドして UDP サーバーを実装する必要があります。

UDP サーバーの実装

UDP サーバーは、 SFXUDPSocket クラスを使用して以下の手順で実装します。

  1. UDP ソケット(SFXUDPSocket インスタンス)を作成します。
  2. SFXUDPSocket::Open 関数を呼び出して、 UDP ソケットを開きます。
  3. SFXUDPSocket::Bind 関数を呼び出して、ローカル の IP アドレスとポート番号を UDP ソケットにバインドします。
  4. SFXUDPSocket::Receive 関数を呼び出して、 UDP ソケットから送信元(UDP クライアント)の IP アドレスとポート番号も含めてデータを受信します。
  5. SFXUDPSocket::Send 関数を呼び出して、指定した送信先の IP アドレスとポート番号へ UDP ソケット経由でデータを送信します。
  6. 4. と 5. の送受信処理を繰り返します。
  7. SFXUDPSocket::Close 関数を呼び出して、UDP ソケットを閉じます。
[Note] 注意

UDP サーバーは、 UDP クライアントとして UDP サーバーにデータを送信することも可能です。

例 856. UDP クライアント兼サーバーの実装

// UDP ソケット (_socket) はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXUDPSocket _socket;  // UDP ソケット

public:
    Void Start(Void);

    // コールバック関数
    XALLBACK_DECLARE_SFXUDPSOCKET(OnBind)
    XALLBACK_DECLARE_SFXUDPSOCKET(OnSend)
    XALLBACK_DECLARE_SFXUDPSOCKET(OnReceive)
};

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

    // ソケットを開く
    if ((error = _socket.Open()) == SFERR_NO_ERROR) {

        // ソケットをローカル の IP アドレスとポート番号にバインドする
        OnBind(SFERR_NO_ERROR);
    }
    return;
}

// Bind 可能が通知されるコールバック関数
XALLBACK_IMPLEMENT_SFXUDPSOCKET(MyClass, OnBind, error)
{
    SFXSocketAddress address(SFXInetAddress::LoopbackInetAddress(), 1024);

    // エラーが発生したかどうかチェックする
    if (error == SFERR_NO_ERROR) {

        error = _socket.Bind(address);

        switch (error) {

            case SFERR_NO_ERROR:

                // データを送信する
                OnSend(SFERR_NO_ERROR);
                break;

            case AEE_NET_WOULDBLOCK:
                // バインドがブロックされたとき

                // Bind をスケジュールする: OnBind コールバック関数を登録する
                // ※ OnBind コールバック関数は Bind 可能になれば BREW AEE により呼び出される
                _socket.ScheduleBind(XALLBACK_INTERNAL(OnBind));
                break;
        }
    }
    return;
}

// Send(データ送信)可能が通知されるコールバック関数
XALLBACK_IMPLEMENT_SFXUDPSOCKET(MyClass, OnSend, error)
{
    static ACharConst data[] = "udp!";
    SFXSocketAddress address(SFXInetAddress::LoopbackInetAddress(), 1024);
    UInt32 send_size;
    UInt32 data_size = sizeof(data) - 1;

    send_size = data_size;

    // エラーが発生したかどうかチェックする
    if (error == SFERR_NO_ERROR) {

        // データを送信する
        error = _socket.Send(address, data, &send_size);

        switch (error) {

            case SFERR_NO_ERROR:

                // 指定したサイズのデータが書き込まれたかチェックする
                // Send 関数は指定したサイズのデータを一度に書き込めないことがある
                // その場合、ここでは簡易化のためエラーとしている
                if (send_size == data_size) {

                    // データを受信する
                    OnReceive(SFERR_NO_ERROR);
                }
                else {

                    TRACE("...send failed...");
                }
                break;

            case AEE_NET_WOULDBLOCK:
                // データ送信がブロックされたとき

                // Send をスケジュールする: OnSend コールバック関数を登録する
                // ※ OnSend コールバック関数は Send 可能になれば BREW AEE により呼び出される
                _socket.ScheduleSend(XALLBACK_INTERNAL(OnSend));
                break;
        }
    }
    return;
}

// Receive(データ受信)可能が通知されるコールバック関数
XALLBACK_IMPLEMENT_SFXUDPSOCKET(MyClass, OnReceive, error)
{
    SFXSocketAddress socket;
    SFXBuffer buffer;
    UInt32 receive_size;
    UInt32 buffer_size(4);

    // エラーが発生したかどうかチェックする
    if (error == SFERR_NO_ERROR) {

        buffer.SetSize(buffer_size);
        receive_size = buffer_size;

        // データを受信する
        error = _socket.Receive(&socket, buffer.GetBuffer(), &receive_size);

        switch (error) {

            case SFERR_NO_ERROR:

                // 指定したサイズのデータが読み込まれたかチェックする
                // Receive 関数は指定したサイズのデータを一度に読み込めないことがある
                // その場合、ここでは簡易化のためエラーとしている
                if (receive_size == buffer_size) {

                    // 読み込んだデータを表示する
                    buffer.SetSize(buffer_size + 1);
                    buffer[buffer_size - 1] = '\0';
                    TRACE(":%s", SFXAnsiString(buffer).GetCString());

                    // ソケットを閉じる
                    _socket.Close();
                }
                else {

                    TRACE("...receive failed...");
                }
                break;

            case AEE_NET_WOULDBLOCK:
                // データ受信がブロックされたとき

                // Receive をスケジュールする: OnReceive コールバック関数を登録する
                // ※ OnReceive コールバック関数は Receive 可能になれば BREW AEE により呼び出される
                _socket.ScheduleReceive(XALLBACK_INTERNAL(OnReceive));
                break;
        }
    }
    return;
}

参照

SFXTCPSocket | SFXSSLSocket | SFXSocketAddress | UDP ソケット通信

メンバ

コンストラクタ/デストラクタ
SFXUDPSocket( Void )
SFXUDPSocket クラスのコンストラクタです。
~SFXUDPSocket( Void )
SFXUDPSocket クラスのデストラクタです。
パブリック関数
SFCError AsSFBAStream( SFBAStreamSmpPtr result )
【現在、この関数は使えません。】
SFCError AsSFBSource( SFBSourceSmpPtr result )
【現在、この関数は使えません。】
SFCError Bind( SFXSocketAddressConstRef address )
Bind (ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)を行います。
Void Cancel( Void )
ソケット通信における各種操作をキャンセルします。
Void Close( Void )
ソケットを閉じます。
SFCError GetLocalAddress( SFXSocketAddressPtr result )
ローカル IP アドレスとポート番号を取得します。
SFBNetMgrSmpConstRef GetSFBNetMgr( Void )
内部で管理する SFBNetMgr インスタンスを取得します。
SFBSocketSmpConstRef GetSFBSocket( Void )
内部で管理する SFBSocket インスタンスを取得します。
SFCError GetStreamReader( UInt32 size , SFXStreamReaderPtr result )
【現在、この関数は使えません。】
SFCError GetStreamReader( SFXStreamReaderPtr result )
【現在、この関数は使えません。】
SFCError GetStreamWriter( UInt32 size , SFXStreamWriterPtr result )
【現在、この関数は使えません。】
SFCError GetStreamWriter( SFXStreamWriterPtr result )
【現在、この関数は使えません。】
SFCError Open( SInt32 linger = -1 )
ソケットを開きます。
SFCError Read( VoidPtr buffer , UInt32Ptr size )
【現在、この関数は使えません。】
SFCError Receive( SFXSocketAddressPtr address , VoidPtr buffer , UInt32Ptr size , UInt16 option = 0x0000 )
Receive(ストリームを使用しないソケットからのデータ受信)を行います。
SFCError ScheduleBind( CallbackSPP spp , VoidPtr reference )
Bind(ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)をスケジュールします。
SFCError ScheduleRead( CallbackSPP spp , VoidPtr reference )
【現在、この関数は使えません。】
SFCError ScheduleReceive( CallbackSPP spp , VoidPtr reference )
Receive(ストリームを使用しないソケットからのデータ受信)をスケジュールします。
SFCError ScheduleSend( CallbackSPP spp , VoidPtr reference )
Send(ストリームを使用しないソケットへのデータ送信)をスケジュールします。
SFCError ScheduleWrite( CallbackSPP spp , VoidPtr reference )
【現在、この関数は使えません。】
SFCError Send( SFXSocketAddressConstRef address , VoidConstPtr buffer , UInt32Ptr size , UInt16 option = 0x0000 )
Send(ストリームを使用しないソケットへのデータ送信)を行います。
SFCError Write( VoidConstPtr buffer , UInt32Ptr size )
【現在、この関数は使えません。】
CallbackSPP (SFXStorage から継承)
ストレージクラスで使用するコールバック関数の型です。

SFXUDPSocket::SFXUDPSocket
SFXUDPSocket クラスのコンストラクタです。
[ public, explicit ]
SFXUDPSocket(Void);

解説

このコンストラクタは、何も行いません。


SFXUDPSocket::~SFXUDPSocket
SFXUDPSocket クラスのデストラクタです。
[ public, virtual ]
~SFXUDPSocket(Void);

解説

このデストラクタは、 SFXUDPSocket::Close 関数を呼び出します。

[Note] 注意

登録されていたコールバックはキャンセルされます。

参照

SFXUDPSocket::Close


SFXUDPSocket::AsSFBAStream
【現在、この関数は使えません。】
[ public, virtual, const ]
SFCError AsSFBAStream(
    SFBAStreamSmpPtr result   // SFBAStream インスタンスへのポインタ
);

戻り値

SFERR_UNSUPPORTED

解説

【現在、この関数は使えません。】


SFXUDPSocket::AsSFBSource
【現在、この関数は使えません。】
[ public, virtual, const ]
SFCError AsSFBSource(
    SFBSourceSmpPtr result   // SFBSource インスタンスへのポインタ
);

戻り値

SFERR_UNSUPPORTED

解説

【現在、この関数は使えません。】


SFXUDPSocket::Bind
Bind (ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)を行います。
[ public ]
SFCError Bind(
    SFXSocketAddressConstRef address   // 端末のローカル IP アドレスとポート番号: ローカル IP アドレスには SFXInetAddress::LoopbackInetAddress() または SFXInetAddress.AnyInetAddress() のいずれかを指定する
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが閉じているとき: SFERR_INVALID_STATE
  • 操作がブロックされたとき: AEE_NET_WOULDBLOCK
  • その他のネットワークエラーが発生したとき: BREW API ISOCKET_GetLastError 関数で得られるエラー値、またはAEE_NET_ERROR

解説

この関数は、Bind (ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)を行います。

ローカル IP アドレスは、 携帯端末内部でループバック通信するときは SFXInetAddress::LoopbackInetAddress 関数の戻り値、 外部と通信するときは SFXInetAddress::AnyInetAddress 関数の戻り値を指定します。 BREW SDK の制約により、これら以外の値はサポートされません。

この関数でこのソケットに関連付けられた IP アドレスとポート番号は、 SFXUDPSocket::Send 関数でデータを送信するときの 送信元の IP アドレスとポート番号になります (SFXUDPSocket::Receive 関数が address 引数に受信する、送信元 IP アドレスとポート番号になります)。

この関数の戻り値が AEE_NET_WOULDBLOCK の場合、 SFXUDPSocket::ScheduleBind 関数でコールバック関数を登録し、 コールバック関数の中で再度この関数を呼び出す必要があります。

[Note] データ送受信についての注意事項

UDP ソケット通信では、 SFXUDPSocket::Receive 関数を使用してデータを受信する前に、 この関数を呼び出してこのソケットを Bind する必要があります 。

SFXUDPSocket::Send 関数を使用してデータを送信する場合は、 この関数によるソケットの Bind は省略できます。 Bind を省略した場合、デフォルトのポート番号がソケットに Bind されます。

[Note] 注意

この関数は、 内部で SFBSocket::Bind 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXUDPSocket::Open 関数を呼び出して 開いている必要があります 。

参照

SFXUDPSocket::Open | SFXUDPSocket::ScheduleBind | SFXInetAddress::LoopbackInetAddress | SFXInetAddress::AnyInetAddress | SFXUDPSocket::Send | SFXUDPSocket::Receive | SFXSocketAddress | SFBSocket::Bind | BREW API ISOCKET_Bind | BREW API AEE_BREW_LOOPBACK | BREW API AEE_INADDR_LOOPBACK | BREW API AEE_INADDR_ANY


SFXUDPSocket::Cancel
ソケット通信における各種操作をキャンセルします。
[ public, virtual ]
Void Cancel(Void);

解説

この関数は、ソケット通信における各種操作をキャンセルします。

具体的には、 キャンセル対象となる操作で登録したコールバックをキャンセルし、 その操作を行う直前の状態(1 つ前の状態)に戻します。

キャンセルの対象となる操作とキャンセル内容は、以下の表の通りです。

表 226. キャンセルの対象となる操作とキャンセル内容

キャンセルの対象となる操作 キャンセル内容
SFXUDPSocket::ScheduleBind 関数による Bind のスケジュール コールバックをキャンセルし、SFXUDPSocket::Open 関数を実行した直後の状態に戻します。
SFXUDPSocket::ScheduleReceive 関数による Receive(データ受信)のスケジュール コールバックをキャンセルし、SFXUDPSocket::ScheduleReceive 関数を実行する直前の状態に戻します。
SFXUDPSocket::ScheduleSend 関数による Send(データ送信)のスケジュール コールバックをキャンセルし、SFXUDPSocket::ScheduleSend 関数を実行する直前の状態に戻します。
[Note] 注意

この関数は、SFXUDPSocket::Close 関数から呼び出されます。

参照

SFXUDPSocket::Open | SFXUDPSocket::ScheduleBind | SFXUDPSocket::ScheduleReceive | SFXUDPSocket::ScheduleSend | SFXUDPSocket::Close


SFXUDPSocket::Close
ソケットを閉じます。
[ public ]
Void Close(Void);

解説

この関数は、このソケットを閉じます(このソケットを終了します)。

具体的には、 SFXUDPSocket::Cancel 関数を呼び出してソケット通信の各種操作をキャンセルし、 内部で管理している SFBNetMgr インスタンスと SFBSocket インスタンスを解放します。

[Note] 注意

登録されていたコールバックはキャンセルされます。

[Note] 注意

この関数は、SFXUDPSocket::~SFXUDPSocket デストラクタから呼び出されます。

[Tip] Tip

サスペンド時は、この関数を呼び出してリソースを解放します。

参照

SFXUDPSocket::Open | SFXUDPSocket::Cancel | SFXUDPSocket::~SFXUDPSocket | SFBNetMgr | SFBSocket | BREW API INetMgr | BREW API ISocket


SFXUDPSocket::GetLocalAddress
ローカル IP アドレスとポート番号を取得します。
[ public, const ]
SFCError GetLocalAddress(
    SFXSocketAddressPtr result   // ローカル IP アドレスとポート番号の格納先へのポインタ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • バインドされていないとき: SFERR_INVALID_STATE
  • result 引数が null のとき: SFERR_INVALID_PARAM
  • その他: BREW API の ISOCKET_GetLastError 関数が返すエラー値、またはAEE_NET_ERROR

解説

この関数は、このソケットのローカル IP アドレスとポートを取得します。

常に、SFXUDPSocket::Bind 関数で設定した値が返ります。

[Tip] Tip

実際の物理的なローカル IP アドレスは、 SFXInetAddress::LocalInetAddress 関数を呼び出して取得できます。

[Note] 前提条件

ローカル IP アドレスとポートを取得するには、 このソケットが SFXUDPSocket::Bind 関数を呼び出してバインドしている必要があります。

参照

SFXUDPSocket::Bind | SFXInetAddress::LocalInetAddress | SFXSocketAddress | BREW API ISOCKET_GetLastError


SFXUDPSocket::GetSFBNetMgr
内部で管理する SFBNetMgr インスタンスを取得します。
[ public, const ]
SFBNetMgrSmpConstRef GetSFBNetMgr(Void);

戻り値

このソケットが内部で管理する SFBNetMgr インスタンス

解説

この関数は、 このソケットが内部で管理する SFBNetMgr インスタンスを取得します。

参照

SFBNetMgr | BREW API INetMgr


SFXUDPSocket::GetSFBSocket
内部で管理する SFBSocket インスタンスを取得します。
[ public, const ]
SFBSocketSmpConstRef GetSFBSocket(Void);

戻り値

このソケットが内部で管理する SFBSocket インスタンス

解説

この関数は、 このソケットが内部で管理する SFBSocket インスタンスを取得します。

参照

SFBSocket | BREW API ISocket


SFXUDPSocket::GetStreamReader
【現在、この関数は使えません。】
[ public, virtual ]
SFCError GetStreamReader(
    UInt32 size                 // バッファサイズ
    SFXStreamReaderPtr result   // データ受信用ストリームへのポインタ
);
[ public, virtual ]
SFCError GetStreamReader(
    SFXStreamReaderPtr result   // データ受信用ストリームへのポインタ
);

戻り値

SFERR_UNSUPPORTED

解説

【現在、この関数は使えません。】


SFXUDPSocket::GetStreamWriter
【現在、この関数は使えません。】
[ public, virtual ]
SFCError GetStreamWriter(
    UInt32 size                 // サイズ
    SFXStreamWriterPtr result   // データ送信用ストリームへのポインタ
);
[ public, virtual ]
SFCError GetStreamWriter(
    SFXStreamWriterPtr result   // データ送信用ストリームへのポインタ
);

戻り値

SFERR_UNSUPPORTED

解説

【現在、この関数は使えません。】


SFXUDPSocket::Open
ソケットを開きます。
[ public ]
SFCError Open(
    SInt32 linger = -1   // リンガー時間( -1 のときは設定しない )
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが閉じていないとき: SFERR_INVALID_STATE
  • SFBNetMgr インスタンスの生成に失敗したとき: SFERR_FAILED
  • SFBSocket インスタンスの生成に失敗したとき: INETMGR_GetLastError() の戻り値
  • UINT16_MAXIMUM よりも大きなリンガー時間を設定したとき: SFERR_INVALID_PARAM

解説

この関数は、このソケットを開きます(このソケットを初期化します)。

具体的には、 SFXUDPSocket クラスが内部で管理する SFBNetMgr インスタンスを生成し、 BREW API INETMGR_OpenSocket 関数を呼び出して AEE_SOCK_DGRAM タイプのソケット(SFBSocket インスタンス)を生成します。

SFBNetMgr / SFBSocket インスタンスは、 SFXUDPSocket::GetSFBNetMgr / SFXUDPSocket::GetSFBSocket 関数で取得することが可能です。 これらのインスタンスを利用して、詳細な設定が可能です。

[Note] リンガー時間(ネットワーク接続の待機時間)

BREW API INETMGR_SetLinger 関数で設定するリンガー時間(ネットワーク接続の待機時間)は、 この関数の linger 引数で指定できます。 デフォルト値は -1 ですが、このときはリンガー時間は設定されません。 リンガー時間の設定についての詳細は、 BREW API INETMGR_SetLinger 関数を参照してください。

[Tip] Tip

SFXUDPSocket::Close 関数を呼び出すと、 このソケットは閉じます。

参照

SFXUDPSocket::Close | SFXUDPSocket::GetSFBNetMgr | SFXUDPSocket::GetSFBSocket | SFBNetMgr | SFBSocket | BREW API INetMgr | BREW API ISocket | BREW API INETMGR_OpenSocket | BREW API INETMGR_SetLinger


SFXUDPSocket::Read
【現在、この関数は使えません。】
[ public, virtual ]
SFCError Read(
    VoidPtr buffer   // データを読み込むバッファ
    UInt32Ptr size   // 呼び出す前: データを読み込むバッファのサイズ。戻り値: 実際に読み込んだデータのサイズ
);

戻り値

SFERR_UNSUPPORTED

解説

【現在、この関数は使えません。】


SFXUDPSocket::Receive
Receive(ストリームを使用しないソケットからのデータ受信)を行います。
[ public ]
SFCError Receive(
    SFXSocketAddressPtr address   // 送信元の IP アドレスとポート
    VoidPtr buffer                // データを受信するバッファ
    UInt32Ptr size                // 呼び出す前: データを受信するバッファのサイズ。戻り値: 実際に受信したデータのサイズ
    UInt16 option = 0x0000        // 0 を指定する ( 未使用 )
);

引数

address

この関数が戻ると、送信元(UDP クライアント)の IP アドレスとポートが格納されています。

buffer

データを受信するバッファを指定します。

size

この関数を呼び出す前に、データを受信するバッファのサイズを指定します。 この関数が戻ると、実際にバッファに受信したデータのサイズが格納されています。

option

0 を指定します(省略可)。この引数は未使用です。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが Bind されていないとき: SFERR_INVALID_STATE
  • size 引数が null のとき: SFERR_INVALID_PARAM
  • 再試行が必要なとき: AEE_NET_WOULDBLOCK
  • その他のネットワークエラーが発生したとき: SFBSocket::GetLastError 関数で得られるエラー値、またはAEE_NET_ERROR

解説

この関数は、Receive(ストリームを使用しないソケットからのデータ受信)を行います。

※ この関数が AEE_NET_WOULDBLOCK を返す場合、 SFXUDPSocket::ScheduleReceive 関数でコールバック関数を登録し、 コールバック関数の中で再度この関数を呼び出して Receive を行う必要があります。

[Note] 注意

この関数は、 内部で SFBSocket::RecvFrom 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXUDPSocket::Bind 関数を呼び出して Bind されていている必要があります 。

参照

SFXUDPSocket::ScheduleReceive | SFXUDPSocket::Bind | SFXSocketAddress | SFBSocket::RecvFrom | BREW API ISOCKET_RecvFrom


SFXUDPSocket::ScheduleBind
Bind(ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)をスケジュールします。
[ public ]
SFCError ScheduleBind(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが閉じているとき、またはBind スケジュール中の状態のとき: SFERR_INVALID_STATE

解説

この関数は、Bind(ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)をスケジュールします。

具体的には、 SFXUDPSocket::Bind 関数を使用して Bind を行うコールバック関数を登録します。 登録されたコールバック関数は、Bind が可能になると BREW AEE により呼び出されます。

コールバック関数が呼び出されるまでは、「Bind スケジュール中の状態」になります。 コールバック関数が呼び出されると、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

コールバック関数が呼び出される前に、 SFXUDPSocket::Cancel 関数を呼び出すと、 Bind のスケジュールはキャンセルされ、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合は、コールバック関数は呼び出されません。

SFXUDPSocket::Bind 関数の戻り値が AEE_NET_WOULDBLOCK である場合、 この関数を使用してコールバック関数を登録し、 再び Bind を試みます。

[Note] 注意

この関数は、 内部で SFBSocket::Writeable 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXTCPSocket::Open 関数を呼び出して 開いている必要があります。

既に Bind がスケジュールされている場合、SFERR_INVALID_STATE エラーが返ります。

参照

SFXUDPSocket::Bind | SFBSocket::Writeable | SFXStorage::CallbackSPP | BREW API ISOCKET_Writeable


SFXUDPSocket::ScheduleRead
【現在、この関数は使えません。】
[ public, virtual ]
SFCError ScheduleRead(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

SFERR_UNSUPPORTED

解説

【現在、この関数は使えません。】

参照

SFXStorage::CallbackSPP


SFXUDPSocket::ScheduleReceive
Receive(ストリームを使用しないソケットからのデータ受信)をスケジュールします。
[ public ]
SFCError ScheduleReceive(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが Bind されていないとき、 または「Receive スケジュール中の状態」のとき: SFERR_INVALID_STATE

解説

この関数は、Receive(ストリームを使用しないソケットからのデータ受信)をスケジュールします。

具体的には、 SFXUDPSocket::Receive 関数による Receive を行うコールバック関数を登録します。 登録されたコールバック関数は、Receive が可能になると BREW AEE により呼び出されます。

コールバック関数が呼び出されるまでは、「Receive スケジュール中の状態」になります。 コールバック関数が呼び出されると、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

コールバック関数が呼び出される前に、 SFXUDPSocket::Cancel 関数を呼び出すと、 Receive のスケジュールはキャンセルされ、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。

SFXUDPSocket::Receive 関数の戻り値が AEE_NET_WOULDBLOCK である場合、 この関数を使用してコールバック関数を登録し、 再び Receive を試みます。

[Note] 注意

この関数は、 内部で SFBAStream::Readable 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXUDPSocket::Bind 関数を呼び出して Bind されていて、Receive をスケジュールされていない必要があります 。

参照

SFXUDPSocket::Receive | SFBAStream::Readable | SFXStorage::CallbackSPP | BREW API ISOCKET_Readable


SFXUDPSocket::ScheduleSend
Send(ストリームを使用しないソケットへのデータ送信)をスケジュールします。
[ public ]
SFCError ScheduleSend(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが閉じているとき、 または「Send スケジュール中の状態」のとき: SFERR_INVALID_STATE

解説

この関数は、Send(ストリームを使用しないソケットへのデータ送信)をスケジュールします。

具体的には、 SFXUDPSocket::Send 関数による Send を行うコールバック関数を登録します。 登録されたコールバック関数は、Send が可能になると BREW AEE により呼び出されます。

コールバック関数が呼び出されるまでは、「Send スケジュール中の状態」になります。 コールバック関数が呼び出されると、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

コールバック関数が呼び出される前に、 SFXUDPSocket::Cancel 関数を呼び出すと、 Send のスケジュールはキャンセルされ、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。

SFXUDPSocket::Send 関数の戻り値が AEE_NET_WOULDBLOCK である場合、 この関数を使用してコールバック関数を登録し、 再び Send を試みます。

[Note] 注意

この関数は、 内部で SFBSocket::Writeable 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXUDPSocket::Open 関数を呼び出して開いていて、 Send がスケジュールされていない必要があります 。

参照

SFXUDPSocket::Send | SFBSocket::Writeable | SFXStorage::CallbackSPP | BREW API ISOCKET_Writeable


SFXUDPSocket::ScheduleWrite
【現在、この関数は使えません。】
[ public, virtual ]
SFCError ScheduleWrite(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

SFERR_UNSUPPORTED

解説

【現在、この関数は使えません。】

参照

SFXStorage::CallbackSPP


SFXUDPSocket::Send
Send(ストリームを使用しないソケットへのデータ送信)を行います。
[ public ]
SFCError Send(
    SFXSocketAddressConstRef address   // 送信先の IP アドレスとポート番号
    VoidConstPtr buffer                // データを送信するバッファ
    UInt32Ptr size                     // 呼び出す前: データを送信するバッファのサイズ。戻り値: 実際に送信したデータのサイズ
    UInt16 option = 0x0000             // 0 を指定する ( 未使用 )
);

引数

address

この関数を呼び出す前に、送信先(UDP サーバー)の IP アドレスとポート番号を指定します。

buffer

データを送信するバッファを指定します。

size

この関数を呼び出す前に、データを送信するバッファのサイズを指定します。 この関数が戻ると、実際にバッファに送信したデータのサイズが格納されています。

option

0 を指定します(省略可)。この引数は未使用です。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが閉じているとき: SFERR_INVALID_STATE
  • size 引数が null のとき: SFERR_INVALID_PARAM
  • 再試行が必要なとき: AEE_NET_WOULDBLOCK
  • その他のネットワークエラーが発生したとき: SFBSocket::GetLastError 関数で得られるエラー値、またはAEE_NET_ERROR

解説

この関数は、Send(ストリームを使用しないソケットへのデータ送信)を行います。

※ この関数が AEE_NET_WOULDBLOCK を返す場合、 SFXUDPSocket::ScheduleSend 関数でコールバック関数を登録し、 コールバック関数の中で再度この関数を呼び出して Send を行う必要があります。

[Note] 注意

この関数は、 内部で SFBSocket::SendTo 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXUDPSocket::Open 関数を呼び出して開いている必要があります 。

参照

SFXUDPSocket::ScheduleSend | SFXUDPSocket::Open | SFXSocketAddress | SFBSocket::SendTo | BREW API ISOCKET_SendTo


SFXUDPSocket::Write
【現在、この関数は使えません。】
[ public, virtual ]
SFCError Write(
    VoidConstPtr buffer   // データを書き込むバッファ
    UInt32Ptr size        // 呼び出す前: データを書き込むバッファのサイズ。戻り値: 実際に書き込んだデータのサイズ
);

戻り値

SFERR_UNSUPPORTED

解説

【現在、この関数は使えません。】