C语言UDP传输系统源码
本文实例为大家分享了C语言UDP传输系统的具体代码,供大家参考,具体内容如下
/*加载库文件*/ #pragmacomment(lib,"ws2_32.lib") /*加载头文件*/ #include#include #include #include /*定义多播常量*/ #defineMCASTADDR"224.3.5.8" #defineMCASTPORT25000 #defineBUFSIZE1024 #defineMCOUNT10 /*定义广播常量*/ #defineBCASTPORT5050 #defineBCOUNT10 /*定义广播全局变量*/ SOCKETsocketBro; SOCKETsocketRec; structsockaddr_inaddrBro; structsockaddr_inaddrRec; BOOLbroadSendFlag; BOOLbroadFlag; DWORDbCount; DWORDbcastAddr; shortbPort; /*定义多播全局变量*/ SOCKETsocketMul; SOCKETsockJoin; structsockaddr_inaddrLocal; structsockaddr_inaddrMul; BOOLmultiSendFlag; BOOLbLoopBack; BOOLmultiFlag; DWORDdwInterface; DWORDdwMulticastGroup; DWORDmCount; shortmPort; /*自定义函数*/ voidinitial(); voidGetArgments(intargc,char**argv); voiduserHelpAll(); voiduserHelpBro(); voiduserHelpMul(); voidbroadcastSend(); voidbroadcastRec(); voidmulControl(); voidmulticastSend(); voidmulticastRec(); /*初始化全局变量函数*/ voidinitial() { /*初始化广播全局变量*/ 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; } /*参数获取函数*/ voidGetArgments(intargc,char**argv) { inti; /*如果参数个数小于2个*/ if(argc<=1) { userHelpAll(); return; } /*获取广播选项*/ if(argv[1][0]=='-'&&argv[1][1]=='b') { /*广播标志设置为真*/ broadFlag=TRUE; for(i=2;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 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; } /*全局用户帮助函数*/ voiduserHelpAll() { printf("Pleasechoosebroadcast[-b]ormulticast[-m]!\n"); printf("userHelpAll:-b[-s][p][-h][-n]|-m[-s][-h][-p][-i][-l][-n]\n"); userHelpBro(); userHelpMul(); } /*广播用户帮助函数*/ voiduserHelpBro() { printf("Broadcast:-b-s:str-p:int-h:str-n:int\n"); printf("-bStartthebroadcastprogram.\n"); printf("-sActasserver(senddata);otherwise\n"); printf("receivedata.Defaultisreceiver.\n"); printf("-p:intPortnumbertouse\n"); printf("Thedefaultportis5050.\n"); printf("-h:strThedecimalbroadcastIPaddress.\n"); printf("-n:intTheNumberofmessagestosend/receive.\n"); printf("Thedefaultnumberis10.\n"); } /*多播用户帮助函数*/ voiduserHelpMul() { printf("Multicast:-m-s-h:str-p:int-i:str-l-n:int\n"); printf("-mStartthemulticastprogram.\n"); printf("-sActasserver(senddata);otherwise\n"); printf("receivedata.Defaultisreceiver.\n"); printf("-h:strThedecimalmulticastIPaddresstojoin\n"); printf("Thedefaultgroupis:%s\n",MCASTADDR); printf("-p:intPortnumbertouse\n"); printf("Thedefaultportis:%d\n",MCASTPORT); printf("-i:strLocalinterfacetobindto;bydefault\n"); printf("useINADDRY_ANY\n"); printf("-lDisableloopback\n"); printf("-n:intNumberofmessagestosend/receive\n"); ExitProcess(-1); } /*广播消息发送函数*/ voidbroadcastSend() { /*设置广播的消息*/ char*smsg="Themessagereceivedisfromsender!"; BOOLopt=TRUE; intnlen=sizeof(addrBro); intret; DWORDi=0; /*创建UDP套接字*/ socketBro=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED); /*如果创建失败*/ if(socketBro==INVALID_SOCKET) { printf("Createsocketfailed:%d\n",WSAGetLastError()); WSACleanup(); return; } /*设置广播地址各个选项*/ addrBro.sin_family=AF_INET; addrBro.sin_addr.s_addr=bcastAddr; addrBro.sin_port=htons(bPort); /*设置该套接字为广播类型*/ if(setsockopt(socketBro,SOL_SOCKET,SO_BROADCAST,(charFAR*)&opt, sizeof(opt))==SOCKET_ERROR) /*如果设置失败*/ { printf("setsockoptfailed:%d",WSAGetLastError()); closesocket(socketBro); WSACleanup(); return; } /*循环发送消息*/ while(i \n",recvbuf,inet_ntoa(from.sin_addr)); } /*关闭套接字、释放占用资源*/ closesocket(socketMul); WSACleanup(); } /*主函数*/ intmain(intargc,char**argv) { WSADATAwsd; initial(); GetArgments(argc,argv); /*初始化Winsock*/ if(WSAStartup(MAKEWORD(2,2),&wsd)!=0) { printf("WSAStartup()failed\n"); return-1; } /*如果是执行广播程序*/ if(broadFlag) { /*以发送者身份发送消息*/ if(broadSendFlag) { broadcastSend(); return0; } /*以接收者身份接收消息*/ else { broadcastRec(); return0; } } /*如果是执行多播程序*/ if(multiFlag) { /*以发送者身份发送消息*/ if(multiSendFlag) { multicastSend(); return0; } /*以接收者身份接收消息*/ else { multicastRec(); return0; } } return0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。