




已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
07網(wǎng)絡(luò)工程本北4-626寢室負(fù)責(zé)人:林型超 第十一章 UDP程序設(shè)計(jì)信息簡(jiǎn)介:UDP協(xié)議,即擁護(hù)數(shù)據(jù)報(bào)協(xié)議(Use Datagram Protocol).是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議.他不提供可靠性,即只把應(yīng)用程序傳給IP層的數(shù)據(jù)發(fā)送出去,但是并不能保證他們能到達(dá)目的.廣播和多播是基于UDP協(xié)議的兩種消息發(fā)送機(jī)制.廣播數(shù)據(jù)即從一個(gè)工作站發(fā)出,局域網(wǎng)內(nèi)的其他所有工作站都能收到它.IP協(xié)議下,多播是廣播的一種變形,IP多播要求將對(duì)收發(fā)數(shù)據(jù)感興趣的所有主機(jī)加入到一個(gè)特定的組. 設(shè)計(jì)目的: 本章實(shí)現(xiàn)的程序即有廣播的功能又有多播的功能,能實(shí)現(xiàn)基本的廣播和多播機(jī)制,其主要包括如下功能. 1) 提供廣播機(jī)制. (1) 能設(shè)定身份,即是廣播消息發(fā)送者還是接收者,默認(rèn)是消息接收者. (2) 能在默認(rèn)的廣播地址和端口號(hào)上發(fā)送廣播消息,接收廣播廣播消息. (3) 能指定廣播地址,端口號(hào),發(fā)送(或接收)數(shù)量選項(xiàng)進(jìn)行廣播消息的發(fā)送和接收. 2) 提供多播機(jī)制 (1) 能制定身份,即是多播消息發(fā)送者好事接收者,默認(rèn)是消息接收者. (2) 主機(jī)能加入一個(gè)指定多播組. (3) 能以默認(rèn)選項(xiàng)發(fā)送多播消息.接收多播消息. (4) 能指定多播地址,本地接口地址,端口號(hào),發(fā)送(或接收)數(shù)量和數(shù)據(jù)反還標(biāo)志選項(xiàng)進(jìn)行多播消息的發(fā)送和接收. 總體設(shè)計(jì)功能模塊設(shè)計(jì) 1.功能模塊圖 本程序有3大部分組成,即廣播模塊,多播模塊部分,如圖11.1所示.其中公共模塊和多播模塊共享的部分,包括初始化模塊,參數(shù)獲取模塊和用戶幫助模塊;廣播模塊包括廣播消息模塊;多播模塊包括多播功能控制模塊,多播消息發(fā)送模塊和多播消息接收模塊. UDP程序設(shè)計(jì)多播消息接收模塊多播功能控制模塊多播消息發(fā)送模塊廣播消息接收模塊初始化模塊用戶幫助模塊廣播消息發(fā)送模塊參數(shù)獲取模塊 多播模塊 廣播模塊 公共模塊 圖11.1 功能模塊圖1) 公共模塊(1) 初始化模塊.該模塊主要用于初始化全局變量,為全局變量賦初始值.(2) 參數(shù)獲取模塊.該模塊用于獲取用戶提供的參數(shù),包括獲取廣播參數(shù),多播參數(shù)和區(qū)分廣播與多播 公共參數(shù)等.(3) 用戶幫助模塊.該模塊應(yīng)于顯示用戶幫助,包括顯示公共幫助,廣播幫助和多播幫助.2) 廣播模塊 (1) 廣播消息發(fā)送模塊.該模塊用于現(xiàn)實(shí)在指定廣播地址和端口發(fā)送指定數(shù)量的廣播消息. (2) 廣播消息接收模塊.該模塊用于現(xiàn)實(shí)在指定廣播地址和端口接收指定數(shù)量的廣播消息. 3) 多播模塊 (1) 多播功能控制模塊.該模塊用于現(xiàn)實(shí)多播套接字的創(chuàng)建和綁定,多播地址的設(shè)定,多播數(shù)據(jù)的設(shè)置,數(shù)據(jù)反還選項(xiàng)的設(shè)置,以及多播組的加入等. (2) 多撥消息發(fā)送模塊.該模塊用于現(xiàn)實(shí)在指定多播組發(fā)送多播消息. (3) 多播消息接收模塊.該模塊用于現(xiàn)實(shí)在指定多播組接收多波消息. 2. 系統(tǒng)流程圖 系統(tǒng)流程圖如圖11.2所示.程序首先初始化全局變量,包括廣播(多播)地址,端樓號(hào),發(fā)送(接收)消息數(shù)量等,然后花圈用戶提供的參數(shù),并初始化Winsock初始也成功則判斷是進(jìn)行廣播還是多播程序;如果是廣播,則判斷是發(fā)送者身份還是接收身份,然后根據(jù)不同的身份進(jìn)行相應(yīng)的處理,即發(fā)送廣播消息或者接收廣播消息;同樣地,如果是多播,也驚醒身份的判斷,然后作同樣的處理. 開(kāi)始發(fā)送廣播消息接收多播消息發(fā)送多播消息接收廣播消息發(fā)送?發(fā)送?廣播?成功?初始化Winsock獲取參數(shù)設(shè)置標(biāo)記初始化全局變量 開(kāi)始 成功? 否 是 否 是 是 否 是 不是 否 是 否 圖11.2 系統(tǒng)流程圖3. 廣播消息發(fā)送流程圖 廣播消息流程圖如圖11.3所示.程序首先創(chuàng)建UDP套接字,如果創(chuàng)建成功則設(shè)置廣播地址;由于進(jìn)行的是廣播機(jī)制,所以要將套接字時(shí)針為廣播類型,即SO-BROADCAST;如果套接字選想不開(kāi)設(shè)置成功則可以避免向指定的廣播地址廣播消息了.廣播結(jié)束后(即達(dá)到最多的消息條數(shù)),關(guān)閉套接字,釋放占用資源.開(kāi)始 創(chuàng)建UDP套接字結(jié)束 關(guān)閉套接字 釋放占用資源還可以發(fā)送? 輸出成功信息 輸出錯(cuò)誤信息發(fā)送成功? 發(fā)送消息 到廣播地址設(shè)置成功? 設(shè)置套接字 為廣播類型設(shè)置廣播地址選項(xiàng)創(chuàng)建成功? 否 是 否 是 否 是 是 否 圖11.3 廣播消息發(fā)送流程圖 4. 廣播消息接收流程圖 結(jié)束 關(guān)閉套接字 釋放占用資源 還可以接收? 清空緩沖區(qū)輸出接收的消息接收廣播消息 綁定套接字和 本地地址創(chuàng)建成功? 設(shè)置套接字為 可重用類型設(shè)置廣播地址選項(xiàng)設(shè)置本地地址選項(xiàng)創(chuàng)建成功?創(chuàng)建UDP套接字 開(kāi)始 廣播消息的接收流程如圖11.4所示.程序首先創(chuàng)建UDP套接字,如果創(chuàng)建成功則設(shè)置本地地址和廣播地址,本地地址用于綁定套接字,廣播地址是廣播消息接收的地址.同發(fā)送廣播消息一樣,接收消息的套接字也要設(shè)置選項(xiàng),不同的是,這里將套接字設(shè)置成可重用類型的,即SO-REUSEADDR,選項(xiàng)級(jí)別為SOL-SOCKET.這樣一來(lái),在相同的本地接口及端口上可以進(jìn)行多次監(jiān)聽(tīng),即在同一臺(tái)主機(jī)上,可以啟動(dòng)多個(gè)消息接收端來(lái)接收廣播消息,如果不設(shè)置這個(gè)選項(xiàng),則在同一臺(tái)主機(jī)上,只能啟動(dòng)一個(gè)消息接收端來(lái)接收消息.套接字選拔設(shè)置成功后,綁定本地地址與套接字,即可以從廣播地址接收廣播消息,如果接收的消息條數(shù)達(dá)到最大限制則結(jié)束程序,關(guān)閉套接字,釋放占用資源. 否 是 否 是 是 圖11.4 廣播消息接收流程 程序?qū)崿F(xiàn) 源碼分析 1.程序預(yù)處理程序預(yù)處理包括庫(kù)文件的導(dǎo)入、頭文件的加載、廣播和常量定義以及廣播全局變量和多播全局變量的定義。/*加載庫(kù)文件*/#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 BCSTPORT 5050#defince BCOUNT 10/*定義廣播全局變量*/SOCKET socketBro;SOCKET socketRec;struct sockaddr_in addrBro;struct sockaddr_in addrRec;BOOL broadSendFlag;BOOL bloadFlag;DWORD bCount;DOWRD bcastAddr;Short bPort;/*定義多播全局變量*/SOCKET socketMul;SOCKET socketJion;struct sockaddr_in addrLocal;struct sockaddr_in addrMul;BOOL multiSendFlag;BOOL bLoopBack;BOOL multiFlag;DWORD dwInterface;DWORD dwMulticastGroup;DWORD mCount;Short mPort;/*自定義函數(shù)*/void initial();void GetArgments(int argc, char *argv);void userHlepAll();void userHlepBro();void userHlepMul();void broadcastSend();void broadcastRec();void multControl(0;void multicastSend();void multicastRec();2.初始化模塊初始化模塊用于為廣播全局變量和多播全局變量賦處始值,由initial(0函數(shù)實(shí)現(xiàn)。Void initial()/*初始化廣播全局變量*/bPort=BROAFDCAST;bCount=BCOUNT;bcastAddr=INADDR_BROADCAST;brastSendFlag=FALSE;multiFlag= FALSE;/*初始化多播全局變量*/dwInterface=INADDR_ANY;dwMulticastGroup=inet_addr(MCASTADDR);mPort=MCASTADDR;mCount=MCOUNT;MmultisendFalg=FALDE;bLoopBack=FALSE; 3.參數(shù)獲取模塊參數(shù)獲取模塊用于獲取用戶提供的選項(xiàng),包括全局選項(xiàng)(即廣播和多播選擇選項(xiàng))、廣播選項(xiàng)和多播選項(xiàng),該模塊由GetArgment()函數(shù)實(shí)現(xiàn)。/*參數(shù)獲取函數(shù)*/Void GetArgment(int argc,char *argv) Int i;/*如果參數(shù)個(gè)數(shù)小于2個(gè)*/If(argc=1) userHelpAll();return;/*獲取廣播選項(xiàng)*/If(argv10=-&argv11=b)/*gu廣播標(biāo)志設(shè)置為真*/broadFalg=TURE;for(i=2;i3)bcastAddr=inet_(&argvi3;Break;/*廣播的端口號(hào)*/Casep;ifstrlen(argvi3)bPort=atoi(&argvi3);break;?/*廣播(接收或者發(fā)送)的數(shù)量*/Case n;bCount=atoi(&argvi3);break;/*其他情況顯示用戶幫助,終止程序*/Default; userHelpBro(); ExitProcess(-1);Break;return; /*獲取多播選項(xiàng)*/ if(argv10=-&argv11=m) /*多播標(biāo)志設(shè)置為真*/ multiFlag = TRUE; for(i=2; i 3) dwMulticastGroup = inet_addr(&argvi3); break; /*本地接口地址*/ case i: if (strlen(argvi) 3) dwInterface = inet_addr(&argvi3); break; /*多播端口號(hào)*/ case p: if (strlen(argvi) 3) mPort = atoi(&argvi3); break; /*環(huán)回標(biāo)志設(shè)置為真*/ case l: bLoopBack = TRUE; break; /*發(fā)送(接收)的數(shù)量*/ case n: mCount = atoi(&argvi3); break; /*其他情況,顯示用戶幫助,終止程序*/ default: userHelpMul(); break; return;/*全局用戶幫助函數(shù)*/void userHelpAll() printf(Please choose broadcast-b or multicast-m !n); printf(userHelpAll: -b -sp-h-n | -m-s-h-p-i-l-nn); userHelpBro(); userHelpMul();/*廣播用戶幫助函數(shù)*/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);/*多播用戶幫助函數(shù)*/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); 5.廣播消息發(fā)送模塊廣播消息發(fā)送模塊實(shí)現(xiàn)廣播消息的發(fā)送功能,即在指定廣播地址和端口上發(fā)送指定數(shù)量的消息。該模塊由函數(shù)broadcastSend()來(lái)實(shí)現(xiàn),其實(shí)現(xiàn)流程可參見(jiàn)圖11.3.該函數(shù)需要接收選項(xiàng)“-h(廣播地址)”、“p-(端口號(hào))”、“n-(發(fā)送數(shù)量)”,如果用戶沒(méi)有提供這些選項(xiàng),函數(shù)將以默認(rèn)值執(zhí)行。 /*廣播消息發(fā)送函數(shù)*/void broadcastSend() /*設(shè)置廣播的消息*/ char *smsg=The message received is from sender!; BOOL opt=TRUE; int nlen=sizeof(addrBro); int ret; DWORD i=0; /*創(chuàng)建UDP套接字*/ socketBro=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED); /*如果創(chuàng)建失敗*/ if(socketBro=INVALID_SOCKET) printf(Create socket failed:%dn,WSAGetLastError(); WSACleanup(); return; /*設(shè)置廣播地址各個(gè)選項(xiàng)*/ addrBro.sin_family=AF_INET; addrBro.sin_addr.s_addr=bcastAddr; addrBro.sin_port=htons(bPort); /*設(shè)置該套接字為廣播類型*/ if (setsockopt(socketBro,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt, sizeof(opt)=SOCKET_ERROR) /*如果設(shè)置失敗*/ printf(setsockopt failed:%d,WSAGetLastError(); closesocket(socketBro); WSACleanup(); return; /*循環(huán)發(fā)送消息*/ while(ibCount) /*延遲1秒*/ Sleep(1000); /*從廣播地址發(fā)送消息*/ ret=sendto(socketBro,smsg,256,0,(struct sockaddr*)&addrBro,nlen); /*如果發(fā)送失敗*/ if(ret=SOCKET_ERROR) printf(Send failed:%d,WSAGetLastError(); /*如果發(fā)送成功*/ else printf(Send message %d!n,i); i+; /*發(fā)送完畢后關(guān)閉套接字、釋放占用資源*/ closesocket(socketBro); WSACleanup();6廣播消息接收模塊廣播消息接收模塊實(shí)現(xiàn)廣播消息的接收功能,既在指定廣播地址和端口上接收指定數(shù)量的消息。該模塊由函數(shù)broadcastRec()來(lái)實(shí)現(xiàn),其實(shí)現(xiàn)流程可參見(jiàn)圖11.4。同發(fā)送廣播消息一樣,該函數(shù)也需要接收選項(xiàng)“-h(廣播地址)”、“p-(端口號(hào))”、“n-(發(fā)送數(shù)量)”,如果用戶沒(méi)有提供這些選項(xiàng),函數(shù)將以默認(rèn)值執(zhí)行。需要注意的是,如果發(fā)送端不是采用默認(rèn)的廣播地址和端口號(hào),則接收端也要使用相應(yīng)的廣播地址和端口號(hào)即通過(guò)選項(xiàng)來(lái)提供與發(fā)送端相同的廣播地址和端口號(hào)。/*廣播消息接收函數(shù)*/void broadcastRec() BOOL optval = TRUE; int addrBroLen;, char buf256; DWORD i=0; /*該地址用來(lái)綁定套接字*/ addrRec.sin_family=AF_INET; addrRec.sin_addr.s_addr=0; addrRec.sin_port=htons(bPort); /*該地址用來(lái)接收網(wǎng)路上廣播的消息*/ addrBro.sin_family=AF_INET; addrBro.sin_addr.s_addr=bcastAddr; addrBro.sin_port=htons(bPort); addrBroLen=sizeof(addrBro); /創(chuàng)建UDP套接字 socketRec=socket(AF_INET,SOCK_DGRAM,0); /*如果創(chuàng)建失敗*/ if(socketRec=INVALID_SOCKET) printf(Create socket error:%d,WSAGetLastError(); WSACleanup(); return; /*設(shè)置該套接字為可重用類型*/ if(setsockopt(socketRec,SOL_SOCKET,SO_REUSEADDR,(char FAR *)&optval, sizeof(optval)=SOCKET_ERROR) /*如果設(shè)置失敗*/ printf(setsockopt failed:%d,WSAGetLastError(); closesocket(socketRec); WSACleanup(); return; /*綁定套接字和地址*/ if(bind(socketRec,(struct sockaddr *)&addrRec, sizeof(struct sockaddr_in)=SOCKET_ERROR) /*如果綁定失敗*/ printf(bind failed with: %dn, WSAGetLastError(); closesocket(socketRec); WSACleanup(); return ; /*從廣播地址接收消息*/ while(ibCount) recvfrom(socketRec,buf,256,0,(struct sockaddr FAR *)&addrBro,(int FAR *)&addrBroLen); /*延遲2秒鐘*/ Sleep(2000); /*輸出接收到緩沖區(qū)的消息*/ printf(%sn,buf); /*情況緩沖區(qū)*/ ZeroMemory(buf,256); i+; /*接收完畢后關(guān)閉套接字、釋放占用資源*/ closesocket(socketRec); WSACleanup();7.多播功能控制模塊. 多播功能控制模塊是為多播發(fā)送模塊和多播接收模塊服務(wù)的,它實(shí)現(xiàn)多播的套接創(chuàng)建和綁定功能、套接字選項(xiàng)設(shè)置功能、多播組加入功能等。該模塊由函數(shù)來(lái)實(shí)現(xiàn),其實(shí)現(xiàn)流量可參見(jiàn)圖11.5。/*多播控制函數(shù)*/void mulControl() int optval; /*創(chuàng)建UDP套接字,用于多播*/ if (socketMul = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF | WSA_FLAG_OVERLAPPED) = INVALID_SOCKET) printf(socket failed with: %dn, WSAGetLastError(); WSACleanup(); return ; /*設(shè)置本地接口地址*/ addrLocal.sin_family = AF_INET; addrLocal.sin_port = htons(mPort); addrLocal.sin_addr.s_addr = dwInterface; /*將UDP套接字綁定到本地地址上*/ if (bind(socketMul, (struct sockaddr *)&addrLocal, sizeof(addrLocal) = SOCKET_ERROR) /*如果綁定失敗*/ printf(bind failed with: %dn, WSAGetLastError(); closesocket(socketMul); WSACleanup(); return ; /*設(shè)置多播地址各個(gè)選項(xiàng)*/ addrMul.sin_family = AF_INET; addrMul.sin_port = htons(mPort); addrMul.sin_addr.s_addr = dwMulticastGroup; /*重新設(shè)置TTL值*/ optval = 8; /*設(shè)置多播數(shù)據(jù)的TTL(存在時(shí)間)值。默認(rèn)情況下,TTL值是1*/ if (setsockopt(socketMul, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&optval, sizeof(int) = SOCKET_ERROR) /*如果設(shè)置失敗*/ printf(setsockopt(IP_MULTICAST_TTL) failed: %dn,WSAGetLastError(); closesocket(socketMul); WSACleanup(); return ; /*如果指定了返還選項(xiàng)*/ if (bLoopBack) /*設(shè)置返還選項(xiàng)為假,禁止將發(fā)送的數(shù)據(jù)返還給本地接口*/ optval = 0; if (setsockopt(socketMul, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&optval, sizeof(optval) = SOCKET_ERROR) /*如果設(shè)置失敗*/ printf(setsockopt(IP_MULTICAST_LOOP) failed: %dn, WSAGetLastError(); closesocket(socketMul); WSACleanup(); return ; /*加入多播組*/ if (sockJoin = WSAJoinLeaf(socketMul, (SOCKADDR *)&addrMul, sizeof(addrMul), NULL, NULL, NULL, NULL, JL_BOTH) = INVALID_SOCKET) /*如果加入不成功*/ printf(WSAJoinLeaf() failed: %dn, WSAGetLastError(); closesocket(socketMul); WSACleanup(); return ; 8、多播消息發(fā)送模塊多播消息發(fā)送模塊實(shí)現(xiàn)多播消息的發(fā)送,即發(fā)送者(需提高“-s”選項(xiàng)標(biāo)識(shí))在指定的多播組、端口發(fā)送指定數(shù)量的多播消息,消息發(fā)送過(guò)程中還可以設(shè)置是否允許消息返還(通過(guò)“-1”設(shè)置)。該模塊由函數(shù)multicastSend()來(lái)實(shí)現(xiàn),其實(shí)現(xiàn)過(guò)程是先調(diào)用mulControl()函數(shù)實(shí)現(xiàn)準(zhǔn)備工作(多播的套接創(chuàng)建和綁定功能、套接字選項(xiàng)設(shè)置功能、多播級(jí)加入功能等),然后發(fā)送指定數(shù)量的消息。與廣播函數(shù)一樣,該函數(shù)也需要接收選項(xiàng)“-h(廣播地址)”、“-p(端口號(hào))”“-i(本地接口)”、和“-n(發(fā)送數(shù)量)”,如果用戶沒(méi)有提供這些選項(xiàng),函數(shù)將以默認(rèn)值執(zhí)行。/*多播消息發(fā)送函數(shù)*/void multicastSend() TCHAR sendbufBUFSIZE; DWORD i; int ret; mulControl(); /*發(fā)送mCount條消息*/ for(i = 0; i mCount; i+) /*將待發(fā)送的消息寫入發(fā)送緩沖區(qū)*/ sprintf(sendbuf, server 1: This is a test: %d, i); ret=sendto(socketMul, (char *)sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&addrMul, sizeof(addrMul); /*如果發(fā)送失敗*/ if(ret=SOCKET_ERROR) printf(sendto failed with: %dn,WSAGetLastError(); closesocket(sockJoin); closesocket(socketMul); WSACleanup(); return ; /*如果發(fā)送成功*/ else printf(Send message %dn,i); Sleep(500); /*關(guān)閉套接字、釋放占用資源*/ closesocket(socketMul); WSACleanup();9、多播消息接收模塊 多播消息接收模塊實(shí)現(xiàn)多播消息的接收,即接收者在指定的多播級(jí)、端口接收指定數(shù)量的多播消息。該模塊由函數(shù)multicastRec()來(lái)實(shí)現(xiàn),其實(shí)現(xiàn)過(guò)程是先調(diào)用mulControl()函數(shù)實(shí)現(xiàn)準(zhǔn)備工作(多播的套接創(chuàng)建和綁定功能、套接字選項(xiàng)設(shè)置功能、多播級(jí)加入功能等),然后接收指定數(shù)量的消息。該函數(shù)也需要接收選項(xiàng)“-h(廣播地址)”“-p(端口號(hào))”“-n(發(fā)送數(shù)量)”,如果用戶沒(méi)有提供這些選項(xiàng),函數(shù)將以默認(rèn)值執(zhí)行。/*多播消息接收函數(shù)*/void multicastRec() DWORD
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)豬采購(gòu)合同范例
- 98勞務(wù)合同范例
- 再婚合同范例
- 九陽(yáng)股賒銷合同范例
- 養(yǎng)豬分紅合同范例
- 代理門店轉(zhuǎn)讓合同范例
- 個(gè)人轉(zhuǎn)讓汽車合同范例
- Coolpo基于FMEA模型的國(guó)際外包風(fēng)險(xiǎn)管理
- 外源氮對(duì)錳介導(dǎo)凋落物難降解有機(jī)碳轉(zhuǎn)化過(guò)程的影響
- 上海精裝修房買賣合同范例
- 2025年湖南省長(zhǎng)沙市單招職業(yè)傾向性測(cè)試題庫(kù)及參考答案
- 十八項(xiàng)核心制度培訓(xùn)課件
- 2024年遠(yuǎn)程教育行業(yè)市場(chǎng)運(yùn)營(yíng)現(xiàn)狀及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 2025年2月上海市高三聯(lián)考高考調(diào)研英語(yǔ)試題(答案詳解)
- 2024-2025學(xué)年六年級(jí)上學(xué)期數(shù)學(xué)第三單元3.1-搭積木比賽(教案)
- DeepSeek從入門到精通
- 植保機(jī)械技術(shù)培訓(xùn)課件
- 2024年水利工程建設(shè)行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資潛力預(yù)測(cè)報(bào)告
- 醫(yī)保電子憑證培訓(xùn)
- 施工現(xiàn)場(chǎng)交叉作業(yè)安全防護(hù)管理措施
- 2024年02月浙江2024年蕭山農(nóng)商銀行春季校園招考筆試歷年參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論