mirror of
https://gitee.com/willfree/http_vpn.git
synced 2026-06-03 08:16:51 +08:00
157 lines
4.8 KiB
C++
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;
|
|
// }
|