设为首页 加入收藏

TOP

2.2.2 小试牛刀--模拟实现Windows的UDP程序(7)
2013-10-07 15:53:25 来源: 作者: 【 】 浏览:85
Tags:2.2.2 小试牛刀 模拟 实现 Windows UDP 程序

2.2.2  小试牛刀--模拟实现Windows的UDP程序(7)

(2) 初始化模块

初始化模块用于为广播全局变量和多播全局变量赋初始值,由initial()函数实现。具体代码如下:

  1. /*初始化全局变量函数*/  
  2. void initial()  
  3. {  
  4. /*初始化广播全局变量*/  
  5. bPort = BCASTPORT;  
  6. bCount = BCOUNT;  
  7. bcastAddr = INADDR_BROADCAST;  
  8. broadSendFlag = FALSE;  
  9. broadFlag = FALSE;  
  10. multiFlag = FALSE;  
  11.  
  12. /*初始化多播全局变量*/  
  13. dwInterface = INADDR_ANY;  
  14. dwMulticastGroup = inet_addr(MCASTADDR);  
  15. mPort = MCASTPORT;  
  16. mCount = MCOUNT;  
  17. multiSendFlag = FALSE;  
  18. bLoopBack = FALSE;  
  19. }  

(3) 获取参数

参数获取模块用于获取用户提供的选项,包括全局选项(即广播和多播选择选项)、广播选项和多播选项,该模块由GetArgment()函数实现。具体实现代码如下:

  1. /*参数获取函数*/  
  2. void GetArgments(int argc, char **argv)  
  3. {  
  4. int i;  
  5. /*如果参数个数小于2个*/  
  6. if(argc <= 1)  
  7. {  
  8. userHelpAll();  
  9. return ;  
  10. }  
  11. /*获取广播选项*/  
  12. if(argv[1][0]=='-' && argv[1][1]=='b')  
  13. {  
  14. /*广播标志设置为真*/  
  15. broadFlag = TRUE;  
  16. for(i=2; i<argc; i++)  
  17. {  
  18. if (argv[i][0] == '-')  
  19. {  
  20. switch (tolower(argv[i][1]))  
  21. {  
  22. /*如果是发送者*/  
  23. case 's':   
  24. broadSendFlag = TRUE;  
  25. break;  
  26. /*广播的地址*/  
  27. case 'h':  
  28. if (strlen(argv[i]) > 3)  
  29. bcastAddr = inet_addr(&argv[i][3]);  
  30. break;  
  31. /*广播的端口号*/  
  32. case 'p':  
  33. if (strlen(argv[i]) > 3)  
  34. bPort = atoi(&argv[i][3]);  
  35. break;  
  36. /*广播(接收或者发送)的数量*/  
  37. case 'n':   
  38. bCount = atoi(&argv[i][3]);  
  39. break;  
  40. /*其他情况显示用户帮助,终止程序*/  
  41. default:  
  42. {  
  43. userHelpBro();  
  44. ExitProcess(-1);  
  45. }  
  46. break;  
  47. }  
  48. }  
  49. }  
  50. return ;  
  51. }  
  52.  
  53. /*获取多播选项*/  
  54. if(argv[1][0]=='-'&&argv[1][1]=='m')  
  55. {  
  56. /*多播标志设置为真*/  
  57. multiFlag = TRUE;  
  58. for(i=2; i<argc; i++)  
  59. {  
  60. if (argv[i][0] == '-')  
  61. {  
  62. switch (tolower(argv[i][1]))  
  63. {  
  64. /*如果是发送者*/  
  65. case 's':   
  66. multiSendFlag = TRUE;  
  67. break;  
  68. /*多播地址*/  
  69. case 'h':   
  70. if (strlen(argv[i]) > 3)  
  71. dwMulticastGroup = inet_addr(&argv[i][3]);  
  72. break;  
  73. /*本地接口地址*/  
  74. case 'i':   
  75. if (strlen(argv[i]) > 3)  
  76. dwInterface = inet_addr(&argv[i][3]);  
  77. break;  
  78. /*多播端口号*/  
  79. case 'p':   
  80. if (strlen(argv[i]) > 3)  
  81. mPort = atoi(&argv[i][3]);  
  82. break;  
  83. /*环回标志设置为真*/  
  84. case 'l':   
  85. bLoopBack = TRUE;  
  86. break;  
  87. /*发送(接收)的数量*/  
  88. case 'n':  
  89. mCount = atoi(&argv[i][3]);  
  90. break;  
  91. /*其他情况,显示用户帮助,终止程序*/  
  92. default:  
  93. userHelpMul();  
  94. break;  
  95. }  
  96. }  
  97. }  
  98. }  
  99. return;  
  100. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.2 小试牛刀--模拟实现Windows.. 下一篇2.2.2 小试牛刀--模拟实现Windows..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)