2.2.2 小试牛刀--模拟实现Windows的UDP程序(7)
(2) 初始化模块
初始化模块用于为广播全局变量和多播全局变量赋初始值,由initial()函数实现。具体代码如下:
- /*初始化全局变量函数*/
- void initial()
- {
- /*初始化广播全局变量*/
- bPort = BCASTPORT;
- bCount = BCOUNT;
- bcastAddr = INADDR_BROADCAST;
- broadSendFlag = FALSE;
- broadFlag = FALSE;
- multiFlag = FALSE;
-
- /*初始化多播全局变量*/
- dwInterface = INADDR_ANY;
- dwMulticastGroup = inet_addr(MCASTADDR);
- mPort = MCASTPORT;
- mCount = MCOUNT;
- multiSendFlag = FALSE;
- bLoopBack = FALSE;
- }
(3) 获取参数
参数获取模块用于获取用户提供的选项,包括全局选项(即广播和多播选择选项)、广播选项和多播选项,该模块由GetArgment()函数实现。具体实现代码如下:
- /*参数获取函数*/
- void GetArgments(int argc, char **argv)
- {
- int i;
- /*如果参数个数小于2个*/
- if(argc <= 1)
- {
- userHelpAll();
- return ;
- }
- /*获取广播选项*/
- if(argv[1][0]=='-' && argv[1][1]=='b')
- {
- /*广播标志设置为真*/
- broadFlag = TRUE;
- for(i=2; i<argc; i++)
- {
- if (argv[i][0] == '-')
- {
- switch (tolower(argv[i][1]))
- {
- /*如果是发送者*/
- case 's':
- broadSendFlag = TRUE;
- break;
- /*广播的地址*/
- case 'h':
- if (strlen(argv[i]) > 3)
- bcastAddr = inet_addr(&argv[i][3]);
- break;
- /*广播的端口号*/
- case 'p':
- if (strlen(argv[i]) > 3)
- bPort = atoi(&argv[i][3]);
- break;
- /*广播(接收或者发送)的数量*/
- case 'n':
- bCount = atoi(&argv[i][3]);
- break;
- /*其他情况显示用户帮助,终止程序*/
- default:
- {
- userHelpBro();
- ExitProcess(-1);
- }
- break;
- }
- }
- }
- return ;
- }
-
- /*获取多播选项*/
- if(argv[1][0]=='-'&&argv[1][1]=='m')
- {
- /*多播标志设置为真*/
- multiFlag = TRUE;
- for(i=2; i<argc; i++)
- {
- if (argv[i][0] == '-')
- {
- switch (tolower(argv[i][1]))
- {
- /*如果是发送者*/
- case 's':
- multiSendFlag = TRUE;
- break;
- /*多播地址*/
- case 'h':
- if (strlen(argv[i]) > 3)
- dwMulticastGroup = inet_addr(&argv[i][3]);
- break;
- /*本地接口地址*/
- case 'i':
- if (strlen(argv[i]) > 3)
- dwInterface = inet_addr(&argv[i][3]);
- break;
- /*多播端口号*/
- case 'p':
- if (strlen(argv[i]) > 3)
- mPort = atoi(&argv[i][3]);
- break;
- /*环回标志设置为真*/
- case 'l':
- bLoopBack = TRUE;
- break;
- /*发送(接收)的数量*/
- case 'n':
- mCount = atoi(&argv[i][3]);
- break;
- /*其他情况,显示用户帮助,终止程序*/
- default:
- userHelpMul();
- break;
- }
- }
- }
- }
- return;
- }