トップ 一覧 検索 ヘルプ 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を操作している部分。
何かをいじった拍子に終了しなくなった場合は、この付近を調査修正する。