Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/02:11/14
2024/05/01:21/26

2024/03/03より301/1375
人気モジュール
No.1: フォーラム 77
No.2: QualNet概要 1
No.3: ニュース 1
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット67
No.2:Windows NT1

No.1:どっかの巡回ロボット65
No.2:Safari1
No.3:Majestic-12巡回ロボット1

日曜日からの合計
メイン
   Application Layer Protocol Implementation & Model Development
     タイマー、スケジュール、トリガーについて。
投稿するにはまず登録を

題名 投稿者 日時
 » タイマー、スケジュール、トリガーについて。 masa 2006/11/18 15:51
     Re: タイマー、スケジュール、トリガーについて。 masa 2006/11/20 8:06
       Re: タイマー、スケジュール、トリガーについて。 gaku 2006/11/20 10:03
       Re: タイマー、スケジュール、トリガーについて。 gaku 2006/11/20 10:28
       Re: タイマー、スケジュール、トリガーについて。 kabocha 2006/11/20 10:36
         Re: タイマー、スケジュール、トリガーについて。 masa 2006/11/20 20:02
フラット表示 前のトピック | 次のトピック
投稿者 スレッド
masa
投稿日時: 2006/11/18 15:51
新米
登録日: 2006/8/12
居住地:
投稿: 14
タイマー、スケジュール、トリガーについて。
いつもお世話になっております。
現在MCBRをいくらか改良し、次のような状況を実現しようとしています。

? MCBRを利用して、クライアントはネットワーク全体にフラッディングを行う。
? フラッディングパケットを受け取ったサーバはクライアントに対してユニキャストで返答する。
? クライアントは一定時間待機し、その間に受け取ったサーバからのメッセージを解析して一番条件に適したものに対してのみユニキャストで応答する。
? クライアントからの応答を受け取ったサーバは再度クライアントに対してユニキャストで応答する。


ここで、?においてタイマーを1秒間に設定してその時刻になったときにメッセージを送り、それをトリガーとしてサーバに対してユニキャストメッセージを送るようプログラムを作ろうとしましたがユニキャストの送信が実行されません。

一般論でも全く構いませんので、このようなスケジューリングの下でパケット送信を成功させるためにはどのようなことを行えばよいのかをご教授いただけませんでしょうか。よろしくお願いします。


参考までに、私が行っている方法を記述します。
タイマーメッセージを生成する時には

  Message* timerMsg = NULL;
      clocktype ACKstartTime;
      AppTimer *timer;

      timerMsg = MESSAGE_Alloc(node, APP_LAYER, APP_MCBR_CLIENT, MSG_APP_MCBR_AREP_PKT);
      MESSAGE_InfoAlloc(node, timerMsg, sizeof(AppTimer));
      timer = (AppTimer *)MESSAGE_ReturnInfo(timerMsg);
      timer->sourcePort = (short) clientPtr->sourcePort;
      timer->type = APP_TIMER_SEND_PKT;//自作タイプ → API.cppに追加
      ACKstartTime = 1 * SECOND;
      MESSAGE_Send(node, timerMsg, ACKstartTime);

タイマーをトリガーとして認識する部分は
  case MSG_APP_MCBR_AREP_PKT:
   {
        ・
        ・
        ・
  switch (timer->type)
          
            case APP_TIMER_SEND_PKT:
          {       
                 ・
                 ・
                 ・ 


ユニキャストを送るときの関数としては

APP_UdpSendNewHeaderVirtualDataWithPriority

を利用しています。
パケットを受信したことをトリガーとする場合、

LookupData data_lookup;
memcpy(&data_lookup, MESSAGE_ReturnPacket(msg), sizeof(data_lookup));
clientPtr = AppMCbrClientGetMCbrClient(
node,
data.sourcePort);

という処理を行い、この data_lookup 、 clientPtr を APP_UdpSendNewHeaderVirtualDataWithPriority に変数として代入すればうまくユニキャストが発生するのですが、今回のようにタイマーをトリガーとする場合は、パケットが発生しないので MESSAGE_ReturnPacket の利用が出来ず、これらの値を使えないのがユニキャスト不発の原因なのではないかと考えいます。

フラット表示 前のトピック | 次のトピック
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT