本文实例为大家分享了C语言UDP传输系统的具体代码,供大家参考,具体内容如下
#pragma comment( lib, "ws2_32.lib" ) #include#include #include #include #define MCASTADDR "224.3.5.8" #define MCASTPORT 25000 #define BUFSIZE 1024 #define MCOUNT 10 #define BCASTPORT 5050 #define BCOUNT 10 SOCKETsocketBro; SOCKETsocketRec; struct sockaddr_in addrBro; struct sockaddr_in addrRec; BOOL broadSendFlag; BOOL broadFlag; DWORDbCount; DWORDbcastAddr; shortbPort; SOCKETsocketMul; SOCKETsockJoin; struct sockaddr_in addrLocal; struct sockaddr_in addrMul; BOOL multiSendFlag; BOOL bLoopBack; BOOL multiFlag; DWORDdwInterface; DWORDdwMulticastGroup; DWORDmCount; shortmPort; void initial(); void GetArgments(int argc, char **argv); void userHelpAll(); void userHelpBro(); void userHelpMul(); void broadcastSend(); void broadcastRec(); void mulControl(); void multicastSend(); void multicastRec(); 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; } void GetArgments(int argc, char **argv) { int i; 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; } void userHelpAll() { printf("Please choose broadcast[-b] or multicast[-m] !n"); printf("userHelpAll: -b [-s][p][-h][-n] | -m[-s][-h][-p][-i][-l][-n]n"); userHelpBro(); userHelpMul(); } void userHelpBro() { printf("Broadcast: -b -s:str -p:int -h:str -n:intn"); printf(" -b Start the broadcast program.n"); printf(" -s Act as server (send data); otherwisen"); printf(" receive data. Default is receiver.n"); printf(" -p:int Port number to usen "); printf(" The default port is 5050.n"); printf(" -h:str The decimal broadcast IP address.n"); printf(" -n:int The Number of messages to send/receive.n"); printf(" The default number is 10.n"); } void userHelpMul() { printf("Multicast: -m -s -h:str -p:int -i:str -l -n:intn"); printf(" -m Start the multicast program.n"); printf(" -s Act as server (send data); otherwisen"); printf(" receive data. Default is receiver.n"); printf(" -h:str The decimal multicast IP address to joinn"); printf(" The default group is: %sn", MCASTADDR); printf(" -p:int Port number to usen"); printf(" The default port is: %dn", MCASTPORT); printf(" -i:str Local interface to bind to; by default n"); printf(" use INADDRY_ANYn"); printf(" -l Disable loopbackn"); printf(" -n:int Number of messages to send/receiven"); ExitProcess(-1); } void broadcastSend() { char *smsg="The message received is from sender!"; BOOL opt=TRUE; int nlen=sizeof(addrBro); int ret; DWORD i=0; socketBro=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED); if(socketBro==INVALID_SOCKET) { printf("Create socket failed:%dn",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,(char FAR *)&opt, sizeof(opt))==SOCKET_ERROR) { printf("setsockopt failed:%d",WSAGetLastError()); closesocket(socketBro); WSACleanup(); return; } while(i n", recvbuf,inet_ntoa(from.sin_addr)); } closesocket(socketMul); WSACleanup(); } int main(int argc, char **argv) { WSADATA wsd; initial(); GetArgments(argc, argv); if (WSAStartup(MAKEWORd(2, 2), &wsd) != 0) { printf("WSAStartup() failedn"); return -1; } if(broadFlag) { if(broadSendFlag) { broadcastSend(); return 0; } else { broadcastRec(); return 0; } } if(multiFlag) { if(multiSendFlag) { multicastSend(); return 0; } else { multicastRec(); return 0; } } return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



