#include #include #include #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<pushDataSegment(resultData4,15+HEAD_LEN); cout<pushDataSegment(resultData2,14+HEAD_LEN); cout<pushDataSegment(resultData0,15+HEAD_LEN); cout<pushDataSegment(resultData3,15+HEAD_LEN); cout<pushDataSegment(resultData5,13+HEAD_LEN); cout<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<setDataSegment(resultData2,8012); // cout<setDataSegment(resultData1,8012); // cout<setDataSegment(resultData3,7012); // char *dataPacket; // cout<getDataPacket(); // cout<setDataSegment(resultData2,15+HEAD_LEN); // cout<setDataSegment(resultData1,15+HEAD_LEN); // cout<setDataSegment(resultData3,14+HEAD_LEN); // // 组装数据包区 // char *dataPacket; // cout<getDataPacket(); // cout<