トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

qualnet_packet

Qualnetでのパケットの操作

文字列の受渡し

データ用の構造体に文字列の領域を追加する。 Message構造体に文字列の領域を追加するだけでは駄目。MCBRであれば以下のようになる。

データ構造

struct struct_app_mcbr_data
{
    Int32 sourcePort;
    Int32 seqNo;
    clocktype txTime;
    char type;
    char buffer[PACKET_DATA_SIZE]; // 追加した領域
}MCbrData;

送信

switch (timer->type)
{
    case APP_TIMER_SEND_PKT:
    {
        char *payload;
        MCbrData data;
        strcpy_s(
            data.buffer, //追加した領域
            PACKET_DATA_SIZE,  
            "挿入する文字列");
...			

受信

switch (msg->eventType)
{
    case MSG_APP_FromTransport:
    {
        UdpToAppRecv *info;
        MCbrData data;
        info = (UdpToAppRecv *) MESSAGE_ReturnInfo(msg);
        memcpy(&data, MESSAGE_ReturnPacket(msg), sizeof(data));
        
        ...
        printf("%s",data.buffer); // 表示
        ...

送信制御

直接送信を行っている部分を切り離すのは困難なので、既存の送信呼び出し部分(〜Client)でパラメータや送信タイミングを調節するのが簡単。

switch (timer->type)
{
    case APP_TIMER_SEND_PKT:
    {
        char *payload;
        MCbrData data;
        payload = (char *)MEM_malloc(itemSizeRead);
        memset(payload, 0, itemSizeRead);
        memset(&data, 0, sizeof(data));
        if( /* 確認  */ ){
            /* 既存の送信処理 */
            ...
        }
        if (clientPtr->sessionIsClosed == FALSE)
        {
            AppMCbrClientScheduleNextPkt(node, clientPtr);
        }
        MEM_free(payload);
        break;
    }
    default:
        assert(FALSE);
}
...

通信終了条件

アプリケーションの終了は、送信したパケット数でクライアントが判定している。場所は〜Client内のsessionIsCloseを操作している部分。何かをいじった拍子に終了しなくなった場合は、この付近を調査修正する。

Copyright(C) by 芝浦工業大学 工学部通信工学科, 森野研究室. All Rights Reserved.