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.