,本文实例为大家分享了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 (); 返回; }/*循环发送消息*/而(iC语言UDP传输系统源码