UDP丢包测试系统
用户数据包说明
struct Comm_Client
{
int iccid;//用户
unsigned char ccstatus;//状态
unsigned char citype;//整数类型
char ctype[6];//文本类型
int iindex;//包
char cdata[1200];//模块数据
};
用户 在客户端初始化为0…99
状态、文本类型和模块数据初始化后就不会改变,不影响流程。
整数类型决定了业务类型,每种业务类型的流量不一样,则每种类型的包数不一样,包多了则占的带宽就多,包的个数决定了流量大小,假设100个包是100个量,1个包就是1个量,100个量肯定比1个量大。
包 在业务流量发送时,从0开始累加,100个包,则序 表示为:0,1,2….,99。服务器端在收到数据包时,通过当前包 和上个包 差值是否为1,来判断是不是有丢包。
客户端流程和说明
初始化数组内数据包和发送策略。
初始化SOCKET
发送循环
按策略发送
休眠1秒
关闭SOCKET
退出
初始化
数组内数据包和发送策略流程和说明
1、初始化用户类型个数
2、100个用户数据包初始化
a)、用随机值来生成类型
b)、用户类型个数统计
3、用不同类型数据的发送量计算每个用户每次发送多少包,100个用户分为不同类型,把类型总的发送量分到每个类型总的用户上,比如100是类型总量,这个类型有10个用户,则处理某个用户包时,就发10个包,凑够100个包。
4、退出
按策略发送
获取开始时间
100个用户数据包发送循环
业务类型包发送循环:用户循环发送内嵌套业务类型数据发送,保证整体的发送量满足要求
用循环变量来初始化包序 ,保证序 自然累加
调用SendTo发送,发送时指定服务器IP
获取结束时间,并输出用时
退出
服务器端流程
主函数流程
定义变量,初始化2个端口值7000和7001
打开线程1,传入端口1
打开线程2,传入端口2
循环让主线程不退出
线程函数流程
分配socket
初始化地址和端口
绑定bind
进入接收函数
接收函数流程
初始化变量,分配30M内存
把socket加入到fd_set变量,准备进行socket状态判断
接收循环看流程图。
我有几个疑问,请你认真看完我的问题!!!
1:判断包标志,这个包是对应某种业务信息的 的数量吗:包有3个标志,用户 和业务类型 、和包序 ,因为包序 的累加变化是在业务类型范围内,这个在用户数据包说明里有举例。第一次不用判断时只需要保存下来,后面是先判断用户 再判断包序 。
2:在第一个包:用户ID和包序 进行初始化时干什么道不是应该在最开始进行初始化,这个包初始化和那个初始化一样吗/p>
客户端的初始化是静态的,在发送端发送时,包序 会自然累加,本业务类型完成,再从0开始。而服务器的初始化是判断用的,在实时变化,不把上次的值保存下来,怎么进行丢包判断。
3:同一用户对包这个,备份包序 是什么时候产生的客户端不是当时已经绑定的对应的。
4:其实同问题3一样,新用户和当前用户ID哪来的。程序刚开始运行不都是才开始吗个用户等于才来,他和谁对比。同问题3一样了,刚来的用户哪有备份包序 /p>
3和4问题,在2问题理解了就明白了。
文章知识点与官方知识档案匹配,可进一步学习相关知识 络技能树首页概览22100 人正在系统学习中 相关资源:暗组苹果找回助手(找回丢失Iphone手机)v1.0中文绿色版-其它代码类…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!