C语言UDP传输系统源码

  

,本文实例为大家分享了C语言UDP传输系统的具体代码,供大家参考,具体内容如下

     /*加载库文件*/# pragma评论(ws2_32自由。”自由”)/*加载头文件*/# include & lt; winsock2.h>   # include & lt; ws2tcpip.h>   # include & lt; stdio.h>   # include & lt; stdlib.h>/*定义多播常量*/#定义MCASTADDR“224.3.5.8”   #定义MCASTPORT 25000   #定义BUFSIZE 1024   #定义MCOUNT 10/*定义广播常量*/#定义BCASTPORT 5050   #定义BCOUNT 10/*定义广播全局变量*/套接字socketBro;   套接字socketRec;   结构指向sockaddr_in addrBro;   结构指向sockaddr_in addrRec;   BOOL broadSendFlag;   BOOL broadFlag;      DWORD bCount;   DWORD bcastAddr;   短bPort;/*定义多播全局变量*/套接字socketMul;   套接字sockJoin;   结构指向sockaddr_in addrLocal;   结构指向sockaddr_in addrMul;      BOOL multiSendFlag;   BOOL bLoopBack;   BOOL multiFlag;      DWORD dwInterface;   DWORD dwMulticastGroup;   DWORD mCount;   短mPort;/*自定义函数*/无效的初始();   空白GetArgments (int命令行参数个数,char * * argv);      空白userHelpAll ();   空白userHelpBro ();   空白userHelpMul ();      空白broadcastSend ();   空白broadcastRec ();      空白mulControl ();   空白multicastSend ();   空白multicastRec ();/*初始化全局变量函数*/无效的初始()   {/*初始化广播全局变量*/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;   }/*参数获取函数*/空白GetArgments (int命令行参数个数,char * * argv)   {   int我;/*如果参数个数小于2个*/如果(argc<=1)   {   userHelpAll ();   返回;   }/*获取广播选项*/如果(argv[1][0]==?”,和argv [1] [1]==" b ")   {/*广播标志设置为真*/broadFlag=TRUE;   (我=2;我& lt;命令行参数个数,我+ +)   {   如果(argv[我][0]==?”)   {   开关(低(argv[我][1]))   {/*如果是发送者*/例“s”:   broadSendFlag=TRUE;   打破;/*广播的地址*/例“h”:   如果(strlen (argv[我])的在3)   bcastAddr=inet_addr(和argv[我][3]);   打破;/*广播的端口号*/例“p”:   如果(strlen (argv[我])的在3)   bPort=atoi(和argv[我][3]);   打破;/*广播(接收或者发送)的数量*/例“n”:   bCount=atoi(和argv[我][3]);   打破;/*其他情况显示用户帮助,终止程序*/默认值:   {   userHelpBro ();   ExitProcess (1);   }   打破;   }   }   }   返回;   }/*获取多播选项*/如果(argv[1][0]==?”,和argv [1] [1]==癿”)   {/*多播标志设置为真*/multiFlag=TRUE;   (我=2;我& lt;命令行参数个数,我+ +)   {   如果(argv[我][0]==?”)   {   开关(低(argv[我][1]))   {/*如果是发送者*/例“s”:   multiSendFlag=TRUE;   打破;/*多播地址*/例“h”:   如果(strlen (argv[我])的在3)   dwMulticastGroup=inet_addr(和argv[我][3]);   打破;/*本地接口地址*/拔摇?   如果(strlen (argv[我])的在3)   dwInterface=inet_addr(和argv[我][3]);   打破;/*多播端口号*/例“p”:   如果(strlen (argv[我])的在3)   mPort=atoi(和argv[我][3]);   打破;/*环回标志设置为真*/例“l”:   bLoopBack=TRUE;   打破;/*发送(接收)的数量*/例“n”:   mCount=atoi(和argv[我][3]);   打破;/*其他情况,显示用户帮助,终止程序*/默认值:   userHelpMul ();   打破;   }   }   }      }   返回;   }/*全局用户帮助函数*/空白userHelpAll ()   {   printf("请选择广播(- b)或多播(- m) ! \ n”);   printf (" userHelpAll: - b [s] [p] [h] [n] | - m [s] [h] [p][我][- l] [n] \ n”);   userHelpBro ();   userHelpMul ();   }/*广播用户帮助函数*/空白userHelpBro ()   {   printf("广播:- b - s: str - p: int - h: str - n: int \ n”);   printf (" - b开始广播节目。\ n”);   printf (" - s作为服务器(发送数据);否则\ n”);   printf("接收数据。默认是接收器。\ n”);   使用printf (" - p: int端口号\ n”);   printf("默认端口是5050。\ n”);   printf (" - h: str小数点广播IP地址。\ n”);   printf (" - n: int发送/接收的消息的数量。\ n”);   printf("默认数量是10。\ n”);   }/*多播用户帮助函数*/空白userHelpMul ()   {   printf("多播:- m - s - h: str - p: int i: str - l - n: int \ n”);   printf (" - m开始多播方案。\ n”);   printf (" - s作为服务器(发送数据);否则\ n”);   printf("接收数据。默认是接收器。\ n”);   printf (" - h: str小数多播IP地址加入\ n”);   printf("默认组:% s \ n”, MCASTADDR);   使用printf (" - p: int端口号\ n”);   printf("默认端口是:% d \ n”, MCASTPORT);   printf("我:str本地接口绑定到;默认情况下\ n”);   printf(“使用INADDRY_ANY \ n”);   printf (" - l禁用回环\ n ");   printf (" - n: int发送/接收的消息数量\ n”);   ExitProcess (1);   }/*广播消息发送函数*/空白broadcastSend ()   {/*设置广播的消息*/char * smsg="消息接收来自发送方!”;   BOOL选择=TRUE;   int nlen=sizeof (addrBro);   int受潮湿腐烂;   字我=0;/*创建UDP套接字*/socketBro=WSASocket (AF_INET SOCK_DGRAM 0, NULL, 0, WSA_FLAG_OVERLAPPED);/*如果创建失败*/如果(socketBro==INVALID_SOCKET)   {   printf("创建套接字失败:% d \ n”, WSAGetLastError ());   WSACleanup ();   返回;   }/*设置广播地址各个选项*/addrBro.sin_family=AF_INET;   addrBro.sin_addr.s_addr=bcastAddr;   addrBro.sin_port=htons (bPort);/*设置该套接字为广播类型*/如果(setsockopt (socketBro、SOL_SOCKET SO_BROADCAST,设置(char *),选择,   sizeof(选择))==SOCKET_ERROR)/*如果设置失败*/{   printf (" setsockopt失败:% d”, WSAGetLastError ());   closesocket (socketBro);   WSACleanup ();   返回;   }/*循环发送消息*/而(i

C语言UDP传输系统源码