当前位置: 首页 > news >正文

海南响应式网站建设制作创意logo一键生成器软件免费

海南响应式网站建设制作,创意logo一键生成器软件免费,购买的网站怎么看网站空间大小,hyein seoiperf3是一个非常强大的工具#xff0c;它是用C语言编写的。同时iperf3也是用C语言实现面向对象编程的典范#xff0c;他以数据结构函数指针为基础#xff0c;非常好的用C语言实现面向对象的编程的三大特征#xff1a;封装#xff0c;继承#xff0c;多态。相信通过阅读i…iperf3是一个非常强大的工具它是用C语言编写的。同时iperf3也是用C语言实现面向对象编程的典范他以数据结构函数指针为基础非常好的用C语言实现面向对象的编程的三大特征封装继承多态。相信通过阅读iperf3的源代码不仅能帮助我们更好的理解与使用iperf3也可以帮助我们去更好的理解C及其它面向对象的语言里的类-对象-实例化-多态-模板等概念的本质。 main函数代码流程 在src/main.c文件里我们可以找到main函数除了用TEST_PROC_AFFINITY宏括起来的部分外TEST_PROC_AFFINITY编译宏是一个未定义宏所以这部分代码是未启用的为了阅读方便在本文中删除了我们可以看到整个main函数分成4大步骤 第一步对象实例化创建对象test第二步根据用户在终端命令行界面输入参数初始化对象test第三步运行对象test处理测试过程 如果是客户端发起连接建立并发送数据包开始测试如果是服务端监听端口等待接收处理客户端发过来的数据包开始测试过程 第四步测试结束删除销毁对象test int main(int argc, char **argv) {struct iperf_test *test;#ifdef TEST_PROC_AFFINITY//这部分代码是未实现的功能删除 #endif//第一步对象实例化创建对象test并用iperf_defaults()对test里的变量和指针赋默认值test iperf_new_test();if (!test)iperf_errexit(NULL, create new test error - %s, iperf_strerror(i_errno));iperf_defaults(test); /* sets defaults *///第二步根据用户在终端命令行界面输入参数初始化对象testif (iperf_parse_arguments(test, argc, argv) 0) {iperf_err(test, parameter error - %s, iperf_strerror(i_errno));fprintf(stderr, \n);usage_long(stdout);exit(1);}//第三步运行对象test处理测试过程if (run(test) 0)iperf_errexit(test, error - %s, iperf_strerror(i_errno));//第四步测试结束删除销毁对象testiperf_free_test(test);return 0; }第一步测试实例的创建–创建对象test 文章开头介绍过iperf3是用C语言实现面向对象编程的典范 所以这里第一步调用iperf_new_test创建对象C语言里不支持class, 所以这里用struct里定义数据函数指针的方式来实现类的数据属性成员函数。然后通过malloc给结构指针附值的方式实现对象(全部结构指针)test的创建与分配内存(class创建对象的本质是给对象分配内存)。以及给test的settings和bitrate_limit_intervals_traffic_bytes二个struct指针进入分配内存。 struct iperf_test * iperf_new_test() {struct iperf_test *test;//通过malloc给test指针分配内存---------对象实例化test (struct iperf_test *) malloc(sizeof(struct iperf_test));if (!test) {i_errno IENEWTEST;return NULL;}/* initialize everything to zero */memset(test, 0, sizeof(struct iperf_test));//通过malloc给test-settings指针分配内存test-settings (struct iperf_settings *) malloc(sizeof(struct iperf_settings));if (!test-settings) {free(test);i_errno IENEWTEST;return NULL;}memset(test-settings, 0, sizeof(struct iperf_settings));//通过malloc给test-bitrate_limit_intervals_traffic_bytes 指针分配内存test-bitrate_limit_intervals_traffic_bytes (iperf_size_t *) malloc(sizeof(iperf_size_t) * MAX_INTERVAL);if (!test-bitrate_limit_intervals_traffic_bytes) {free(test-settings);free(test);i_errno IENEWTEST;return NULL;}memset(test-bitrate_limit_intervals_traffic_bytes, 0, sizeof(sizeof(iperf_size_t) * MAX_INTERVAL));/* By default all output goes to stdout */test-outfile stdout;return test; } 第二步测试实例的初始化–根据输入参数初始化对象test 这一步本质上是调用iperf_defaults对test进行初步的初始化对test里的数据和函数附默认值比如tcp, udp, sctp分别调用什么函数去进行数据发送与接收调用什么函数进行连接的函数指针的初始化这里我们可以把依赖于配置而附不同的函数的函数指针的过程视为虚接口的初始化。这个函数的调用可以视为构造函数的调用。然后读取用户在终端命令行界面上输入的参数对test进行变量与方法函数的初始化配置各种属性以及根据输入参数的不同比如是测试UDP还是TCP是客户端还是服务端等等。 以-c和-s二个参数为例如果用户输入的命令行为iperf3 -c 则将test初始化为发送端模式以便后面第三步调用run时可以找到正确的方法与客户端、服务端TCP/UDP相应的回调函数 int iperf_defaults(struct iperf_test *testp) {struct protocol *tcp, *udp; #if defined(HAVE_SCTP_H)struct protocol *sctp; #endif /* HAVE_SCTP_H */testp-omit OMIT;testp-duration DURATION;testp-diskfile_name (char*) 0;testp-affinity -1;testp-server_affinity -1;TAILQ_INIT(testp-xbind_addrs); #if defined(HAVE_CPUSET_SETAFFINITY)CPU_ZERO(testp-cpumask); #endif /* HAVE_CPUSET_SETAFFINITY */testp-title NULL;testp-extra_data NULL;testp-congestion NULL;testp-congestion_used NULL;testp-remote_congestion_used NULL;testp-server_port PORT;//以代码省略 }int iperf_parse_arguments(struct iperf_test *test, int argc, char **argv) {static struct option longopts[] { /* 此处省略大量代码 */{server, no_argument, NULL, s},{client, required_argument, NULL, c}, /* 此处省略大量代码 */{version4, no_argument, NULL, 4},{version6, no_argument, NULL, 6}, /* 此处省略大量代码 */{NULL, 0, NULL, 0}};while ((flag getopt_long(argc, argv, p:f:i:D1VJvsc:ub:t:n:k:l:P:Rw:B:M:N46S:L:ZO:F:A:T:C:dI:hX:, longopts, NULL)) ! -1) {switch (flag) { /* 此处省略大量代码 */ case s:if (test-role c) {i_errno IESERVCLIENT;return -1;}iperf_set_test_role(test, s);break;case c:if (test-role s) {i_errno IESERVCLIENT;return -1;}iperf_set_test_role(test, c);}break;case 4:test-settings-domain AF_INET;break;case 6:test-settings-domain AF_INET6;break; /* 此处省略大量代码 */} /* 此处省略大量代码 */if ((test-role ! c) (test-role ! s)) {i_errno IENOROLE;return -1;} /* 此处省略大量代码 */return 0; }第三步测试实例的执行–运行对象test处理测试过程 在这里程序会根据自己是运行在服务端还是客户端模式执行不同的测试流程 在服务端 程序会打开socket监听并等待连接连接成功后就不停的把客户端送过来的数据读取出来并丢弃直到连接断开继续监听并等待新的连接。在客户端程序会打开socket去连接服务端连接成功后按指定测试方式发送数据包直到测试结束。 static int run(struct iperf_test *test) {/*代码删除内容略*/free(test); }
http://www.w-s-a.com/news/428211/

相关文章:

  • 凡科网站怎么做建站关键字搜索网站怎么做
  • 小说网站建站程序企业邮箱地址
  • 福州市住房和城乡建设网站网站开发方案论文
  • 在线教育网站开发网站推广常用方法包括
  • 东莞高端品牌网站建设软件开发模型及特点
  • 个人网站的设计与实现的主要内容网站开发公司架构
  • 浏览器收录网站什么是新媒体营销
  • 上海营销网站建设公司下面哪个不是网页制作工具
  • 有哪些网站可以做设计比赛苏州设计公司排名前十
  • 公益网站建设需求车陂手机网站开发
  • 高端网站建设专业营销团队宁德网站建设51yunsou
  • 网站如何做cdn购物网站建设app开发
  • 简单的手机网站模板好看大方的企业网站源码.net
  • 沈阳住房和城乡建设厅网站网站个人备案做论坛
  • 企业建网站的目的开家网站建设培训班
  • 做怎么网站网站优化和推广
  • 建站工具 风铃网站每年空间域名费用及维护费
  • 网站开发工具 知乎工业软件开发技术就业前景
  • 永济微网站建设费用新手如何自学编程
  • 在本地怎么做网站深圳保障房申请条件2022
  • 广州天河区网站建设公司东莞网络游戏制作开发
  • 哪个网站做免费小程序rio门户网站的制作
  • 短网站生成查询网站所有关键词排名
  • 阿里云购买网站登录技术服务外包公司
  • 淘宝单页面网站手机制作游戏的软件
  • 汉中市网站建设wordpress编辑器好麻烦
  • 织梦做的网站快照被攻击在线看crm系统
  • 青岛物流公司网站建设网站建设提议
  • 企业网站建设高端品牌宿州注册公司多少钱
  • 个人微信公众号怎么做微网站吗湛江网站制作方案