Files
http_vpn/http_vpn_20191209/ccn_p2p/PriorQueuePool/testMain.cpp
T
2020-02-23 20:44:48 +08:00

157 lines
4.8 KiB
C++

#include<iostream>
#include<stdlib.h>
#include<cstring>
#include "QueuePool.h"
#define HEAD_LEN 12
// #define DATASEG_SZ 20 //数据段最大长度
using namespace std;
// 测试程序
// 用于测试QueuePool对于数据段乱序的处理
// 将字符数组封装成约定格式的数据段
int makeData(unsigned int seq,unsigned int seq_first,
unsigned int len,char *data,int datalen,char *resultData);
int main(){
// 制造数据包0:包含数据段012
char rawData0[]="imissyou.00000.";
char rawData1[]="imissyou.11111.";
char rawData2[]="imissyou.2222.";
char resultData0[15+HEAD_LEN];
char resultData1[15+HEAD_LEN];
char resultData2[14+HEAD_LEN];
makeData(0,0,44,rawData0,15,resultData0);
makeData(1,0,44,rawData1,15,resultData1);
makeData(2,0,44,rawData2,14,resultData2);
// 制造数据包3:包含数据段345
char rawData3[]="imissyou.33333.";
char rawData4[]="imissyou.44444.";
char rawData5[]="imissyou.555.";
char resultData3[15+HEAD_LEN];
char resultData4[15+HEAD_LEN];
char resultData5[13+HEAD_LEN];
makeData(3,3,43,rawData3,15,resultData3);
makeData(4,3,43,rawData4,15,resultData4);
makeData(5,3,43,rawData5,13,resultData5);
// 新建并打印QueuePool的初始状态
QueuePool *qp= new QueuePool();
qp->printQueuePool();
// 按照序号420351的顺序模拟乱序数据段的接收
// 注:此时数据段的先后顺序不仅包内乱序,
// 而且包间乱序
cout<<endl<<endl;
cout<<"set data segment 4 of data packet 3: "<<endl;
qp->pushDataSegment(resultData4,15+HEAD_LEN);
cout<<endl<<endl;
cout<<"set data segment 2 of data packet 0: "<<endl;
qp->pushDataSegment(resultData2,14+HEAD_LEN);
cout<<endl<<endl;
cout<<"set data segment 0 of data packet 0: "<<endl;
qp->pushDataSegment(resultData0,15+HEAD_LEN);
cout<<endl<<endl;
cout<<"set data segment 3 of data packet 3: "<<endl;
qp->pushDataSegment(resultData3,15+HEAD_LEN);
cout<<endl<<endl;
cout<<"set data segment 5 of data packet 3: "<<endl;
qp->pushDataSegment(resultData5,13+HEAD_LEN);
cout<<endl<<endl;
cout<<"set data segment 1 of data packet 0: "<<endl;
qp->pushDataSegment(resultData1,15+HEAD_LEN);
delete qp;
return 0;
}
// 将数据加上首序列号等信息
int makeData(unsigned int seq,unsigned int seq_first,
unsigned int len,char *data,int datalen,char *resultData){
memcpy(&resultData[0],&seq,4);
memcpy(&resultData[4],&seq_first,4);
memcpy(&resultData[8],&len,4);
memcpy(&resultData[12],&data[0],datalen);
return 0;
}
// int main(){
// PriorQueue *pq= new PriorQueue();
// char rawData1[]="imissyou.11111.";
// char rawData2[]="imissyou.22222.";
// char rawData3[]="imissyou.33333.";
// char resultData1[8000+HEAD_LEN];
// char resultData2[8000+HEAD_LEN];
// char resultData3[7000+HEAD_LEN];
// makeData(0,0,23000,rawData1,8000,resultData1);
// makeData(1,0,23000,rawData2,8000,resultData2);
// makeData(2,0,23000,rawData3,7000,resultData3);
// cout<<endl<<endl<<endl;
// cout<<"test2"<<endl;
// pq->setDataSegment(resultData2,8012);
// cout<<endl<<endl<<endl;
// cout<<"test1"<<endl;
// pq->setDataSegment(resultData1,8012);
// cout<<endl<<endl<<endl;
// cout<<"test3"<<endl;
// pq->setDataSegment(resultData3,7012);
// char *dataPacket;
// cout<<endl<<endl<<endl;
// dataPacket=pq->getDataPacket();
// cout<<endl<<endl<<endl;
// cout<<"dataPacket: "<<endl;
// cout<<dataPacket<<endl;
// cout<<&dataPacket[8000]<<endl;
// cout<<&dataPacket[16000]<<endl;
// delete pq;
// return 0;
// }
// int main(){
// // 制造数据段区
// PriorQueue *pq= new PriorQueue();
// char rawData1[]="imissyou.11111.";
// char rawData2[]="imissyou.22222.";
// char rawData3[]="imissyou.3333.";
// char resultData1[15+HEAD_LEN];
// char resultData2[15+HEAD_LEN];
// char resultData3[14+HEAD_LEN];
// makeData(0,0,44,rawData1,15,resultData1);
// makeData(1,0,44,rawData2,15,resultData2);
// makeData(2,0,44,rawData3,14,resultData3);
// // 装填数据段区
// cout<<endl<<endl<<endl;
// cout<<"test2"<<endl;
// pq->setDataSegment(resultData2,15+HEAD_LEN);
// cout<<endl<<endl<<endl;
// cout<<"test1"<<endl;
// pq->setDataSegment(resultData1,15+HEAD_LEN);
// cout<<endl<<endl<<endl;
// cout<<"test3"<<endl;
// pq->setDataSegment(resultData3,14+HEAD_LEN);
// // 组装数据包区
// char *dataPacket;
// cout<<endl<<endl<<endl;
// dataPacket=pq->getDataPacket();
// cout<<endl<<endl<<endl;
// cout<<"dataPacket: "<<endl;
// cout<<dataPacket<<endl;
// delete pq;
// return 0;
// }