版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 07網(wǎng)絡(luò)工程本北4-626寢室負(fù)責(zé)人:林型超 第十一章 udp程序設(shè)計(jì)信息簡介:udp協(xié)議,即擁護(hù)數(shù)據(jù)報(bào)協(xié)議(use datagram protocol).是一個簡單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議.他不提供可靠性,即只把應(yīng)用程序傳給ip層的數(shù)據(jù)發(fā)送出去,但是并不能保證他們能到達(dá)目的.廣播和多播是基于udp協(xié)議的兩種消息發(fā)送機(jī)制.廣播數(shù)據(jù)即從一個工作站發(fā)出,局域網(wǎng)內(nèi)的其他所有工作站都能收到它.ip協(xié)議下,多播是廣播的一種變形,ip多播要求將對收發(fā)數(shù)據(jù)感興趣的所有主機(jī)加入到一個特定的組. 設(shè)計(jì)目的: 本章實(shí)現(xiàn)的程序即有廣播的功能又有多播的功能,能實(shí)現(xiàn)基本的廣播和多播機(jī)制,其主要包括如下功能. 1) 提
2、供廣播機(jī)制. (1) 能設(shè)定身份,即是廣播消息發(fā)送者還是接收者,默認(rèn)是消息接收者. (2) 能在默認(rèn)的廣播地址和端口號上發(fā)送廣播消息,接收廣播廣播消息. (3) 能指定廣播地址,端口號,發(fā)送(或接收)數(shù)量選項(xiàng)進(jìn)行廣播消息的發(fā)送和接收. 2) 提供多播機(jī)制 (1) 能制定身份,即是多播消息發(fā)送者好事接收者,默認(rèn)是消息接收者. (2) 主機(jī)能加入一個指定多播組. (3) 能以默認(rèn)選項(xiàng)發(fā)送多播消息.接收多播消息. (4) 能指定多播地址,本地接口地址,端口號,發(fā)送(或接收)數(shù)量和數(shù)據(jù)反還標(biāo)志選項(xiàng)進(jìn)行多播消息的發(fā)送和接收. 總體設(shè)計(jì)功能模塊設(shè)計(jì) 1.功能模塊圖 本程序有3大部分組成,即廣播模塊,多播模
3、塊部分,如圖11.1所示.其中公共模塊和多播模塊共享的部分,包括初始化模塊,參數(shù)獲取模塊和用戶幫助模塊;廣播模塊包括廣播消息模塊;多播模塊包括多播功能控制模塊,多播消息發(fā)送模塊和多播消息接收模塊. udp程序設(shè)計(jì)多播消息接收模塊多播功能控制模塊多播消息發(fā)送模塊廣播消息接收模塊初始化模塊用戶幫助模塊廣播消息發(fā)送模塊參數(shù)獲取模塊 多播模塊 廣播模塊 公共模塊 圖11.1 功能模塊圖1) 公共模塊(1) 初始化模塊.該模塊主要用于初始化全局變量,為全局變量賦初始值.(2) 參數(shù)獲取模塊.該模塊用于獲取用戶提供的參數(shù),包括獲取廣播參數(shù),多播參數(shù)和區(qū)分廣播與多播 公共參數(shù)等.(3) 用戶幫助模塊.該模塊
4、應(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所示.程序首先初始化全局變
5、量,包括廣播(多播)地址,端樓號,發(fā)送(接收)消息數(shù)量等,然后花圈用戶提供的參數(shù),并初始化winsock初始也成功則判斷是進(jìn)行廣播還是多播程序;如果是廣播,則判斷是發(fā)送者身份還是接收身份,然后根據(jù)不同的身份進(jìn)行相應(yīng)的處理,即發(fā)送廣播消息或者接收廣播消息;同樣地,如果是多播,也驚醒身份的判斷,然后作同樣的處理. 開始發(fā)送廣播消息接收多播消息發(fā)送多播消息接收廣播消息發(fā)送?發(fā)送?廣播?成功?初始化winsock獲取參數(shù)設(shè)置標(biāo)記初始化全局變量 開始 成功? 否 是 否 是 是 否 是 不是 否 是 否 圖11.2 系統(tǒng)流程圖3. 廣播消息發(fā)送流程圖 廣播消息流程圖如圖11.3所示.程序首先創(chuàng)建udp套
6、接字,如果創(chuàng)建成功則設(shè)置廣播地址;由于進(jìn)行的是廣播機(jī)制,所以要將套接字時針為廣播類型,即so-broadcast;如果套接字選想不開設(shè)置成功則可以避免向指定的廣播地址廣播消息了.廣播結(jié)束后(即達(dá)到最多的消息條數(shù)),關(guān)閉套接字,釋放占用資源.開始 創(chuàng)建udp套接字結(jié)束 關(guān)閉套接字 釋放占用資源還可以發(fā)送? 輸出成功信息 輸出錯誤信息發(fā)送成功? 發(fā)送消息 到廣播地址設(shè)置成功? 設(shè)置套接字 為廣播類型設(shè)置廣播地址選項(xiàng)創(chuàng)建成功? 否 是 否 是 否 是 是 否 圖11.3 廣播消息發(fā)送流程圖 4. 廣播消息接收流程圖 結(jié)束 關(guān)閉套接字 釋放占用資源 還可以接收? 清空緩沖區(qū)輸出接收的消息接收廣播消息
7、綁定套接字和 本地地址創(chuàng)建成功? 設(shè)置套接字為 可重用類型設(shè)置廣播地址選項(xiàng)設(shè)置本地地址選項(xiàng)創(chuàng)建成功?創(chuàng)建udp套接字 開始 廣播消息的接收流程如圖11.4所示.程序首先創(chuàng)建udp套接字,如果創(chuàng)建成功則設(shè)置本地地址和廣播地址,本地地址用于綁定套接字,廣播地址是廣播消息接收的地址.同發(fā)送廣播消息一樣,接收消息的套接字也要設(shè)置選項(xiàng),不同的是,這里將套接字設(shè)置成可重用類型的,即so-reuseaddr,選項(xiàng)級別為sol-socket.這樣一來,在相同的本地接口及端口上可以進(jìn)行多次監(jiān)聽,即在同一臺主機(jī)上,可以啟動多個消息接收端來接收廣播消息,如果不設(shè)置這個選項(xiàng),則在同一臺主機(jī)上,只能啟動一個消息接收端來
8、接收消息.套接字選拔設(shè)置成功后,綁定本地地址與套接字,即可以從廣播地址接收廣播消息,如果接收的消息條數(shù)達(dá)到最大限制則結(jié)束程序,關(guān)閉套接字,釋放占用資源. 否 是 否 是 是 圖11.4 廣播消息接收流程 程序?qū)崿F(xiàn) 源碼分析 1.程序預(yù)處理程序預(yù)處理包括庫文件的導(dǎo)入、頭文件的加載、廣播和常量定義以及廣播全局變量和多播全局變量的定義。/*加載庫文件*/#pragma comment(lib,”ws2_32.lib”)/*加載頭文件*/#include<winsoke2.h>#include<ws2tcpip.h>#include<stdio.h>#include
9、<stdlib.h>/*定義多播常量*/#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;dwo
10、rd 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
11、 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_
12、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,
13、char *argv) int i;/*如果參數(shù)個數(shù)小于2個*/if(argc<=1) userhelpall();return;/*獲取廣播選項(xiàng)*/if(argv10=-&&argv11=b)/*gu廣播標(biāo)志設(shè)置為真*/broadfalg=ture;for(i=2;i<argc;i+)if(argvi0=-)switch(tolower(argvi1)?/*如果是發(fā)送者*/ cases:broadsendflag=ture;break;/*廣播的地址*/caseh:if(strlen(argvi>3)bcastaddr=inet_(&argvi3;b
14、reak;/*廣播的端口號*/casep;ifstrlen(argvi>3)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
15、; i < argc ;i+) if (argvi0 = '-') switch (tolower(argvi1) /*如果是發(fā)送者*/ case 's': multisendflag = true; break; /*多播地址*/ case 'h': if (strlen(argvi) > 3) dwmulticastgroup = inet_addr(&argvi3); break; /*本地接口地址*/ case 'i': if (strlen(argvi) > 3) dwinterface = i
16、net_addr(&argvi3); break; /*多播端口號*/ 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;
17、/*全局用戶幫助函數(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
18、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
19、 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"); prin
20、tf(" -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"); prin
21、tf(" 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ā)送模塊廣播
22、消息發(fā)送模塊實(shí)現(xiàn)廣播消息的發(fā)送功能,即在指定廣播地址和端口上發(fā)送指定數(shù)量的消息。該模塊由函數(shù)broadcastsend()來實(shí)現(xiàn),其實(shí)現(xiàn)流程可參見圖11.3.該函數(shù)需要接收選項(xiàng)“-h(廣播地址)”、“p-(端口號)”、“n-(發(fā)送數(shù)量)”,如果用戶沒有提供這些選項(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; d
23、word 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è)置廣播地址各個選項(xiàng)*/ addrbro.sin_family=af_inet; addrbro.sin_addr.s_addr=bcastaddr; addr
24、bro.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(i<bcount) /*延遲1秒*/ sleep
25、(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廣播
26、消息接收模塊廣播消息接收模塊實(shí)現(xiàn)廣播消息的接收功能,既在指定廣播地址和端口上接收指定數(shù)量的消息。該模塊由函數(shù)broadcastrec()來實(shí)現(xiàn),其實(shí)現(xiàn)流程可參見圖11.4。同發(fā)送廣播消息一樣,該函數(shù)也需要接收選項(xiàng)“-h(廣播地址)”、“p-(端口號)”、“n-(發(fā)送數(shù)量)”,如果用戶沒有提供這些選項(xiàng),函數(shù)將以默認(rèn)值執(zhí)行。需要注意的是,如果發(fā)送端不是采用默認(rèn)的廣播地址和端口號,則接收端也要使用相應(yīng)的廣播地址和端口號即通過選項(xiàng)來提供與發(fā)送端相同的廣播地址和端口號。/*廣播消息接收函數(shù)*/void broadcastrec() bool optval = true; int addrbrolen;,
27、 char buf256; dword i=0; /*該地址用來綁定套接字*/ addrrec.sin_family=af_inet; addrrec.sin_addr.s_addr=0; addrrec.sin_port=htons(bport); /*該地址用來接收網(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_in
28、et,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 faile
29、d:%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 ;
30、/*從廣播地址接收消息*/ while(i<bcount) 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.多播功能控制模塊.
31、 多播功能控制模塊是為多播發(fā)送模塊和多播接收模塊服務(wù)的,它實(shí)現(xiàn)多播的套接創(chuàng)建和綁定功能、套接字選項(xiàng)設(shè)置功能、多播組加入功能等。該模塊由函數(shù)來實(shí)現(xiàn),其實(shí)現(xià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)
32、 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)
33、 = socket_error) /*如果綁定失敗*/ printf("bind failed with: %dn", wsagetlasterror(); closesocket(socketmul); wsacleanup(); return ; /*設(shè)置多播地址各個選項(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(存在時間
34、)值。默認(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)為假,
35、禁止將發(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
36、 = 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)識)在指定的多播組、端口發(fā)
37、送指定數(shù)量的多播消息,消息發(fā)送過程中還可以設(shè)置是否允許消息返還(通過“-1”設(shè)置)。該模塊由函數(shù)multicastsend()來實(shí)現(xiàn),其實(shí)現(xiàn)過程是先調(diào)用mulcontrol()函數(shù)實(shí)現(xiàn)準(zhǔn)備工作(多播的套接創(chuàng)建和綁定功能、套接字選項(xiàng)設(shè)置功能、多播級加入功能等),然后發(fā)送指定數(shù)量的消息。與廣播函數(shù)一樣,該函數(shù)也需要接收選項(xiàng)“-h(廣播地址)”、“-p(端口號)”“-i(本地接口)”、和“-n(發(fā)送數(shù)量)”,如果用戶沒有提供這些選項(xiàng),函數(shù)將以默認(rèn)值執(zhí)行。/*多播消息發(fā)送函數(shù)*/void multicastsend() tchar sendbufbufsize; dword i; int ret; m
38、ulcontrol(); /*發(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("sendt
39、o 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)多播消息的接收,即接收者在指定的多播級、端口接收指定數(shù)量的多播消息。該模塊由函數(shù)multicastrec()來實(shí)現(xiàn),其實(shí)現(xiàn)過程是先調(diào)用mulcontrol()函數(shù)實(shí)現(xiàn)準(zhǔn)備工作(多播的套接創(chuàng)建和綁定功能、套接字選項(xiàng)設(shè)置功能、多播級加入功能等),然后接收指定數(shù)量的消息。該函數(shù)也需要接收選項(xiàng)“-h(廣播地址)”“-p(端口號)”“-n(發(fā)送數(shù)量)”,如果用戶沒有提供這些選項(xiàng),函數(shù)將以默認(rèn)值執(zhí)行。/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省教育機(jī)構(gòu)2025年度勞動合同規(guī)范文本2篇
- 2025年金融資產(chǎn)交易居間委托服務(wù)合同2篇
- 二零二五年度法院離婚案件財(cái)產(chǎn)分割操作合同3篇
- 2025年度綠化帶病蟲害防治服務(wù)合同范本4篇
- 二零二五年度醫(yī)療設(shè)備采購與租賃合同參考文本4篇
- 2025版模具行業(yè)市場調(diào)研與購銷合同4篇
- 2025年人才招聘解決方案合同
- 2025年古玩字畫擔(dān)保協(xié)議
- 2025年寬帶網(wǎng)絡(luò)使用合同
- 2025年融資居間服務(wù)合同的比較研究
- 2025年度版權(quán)授權(quán)協(xié)議:游戲角色形象設(shè)計(jì)與授權(quán)使用3篇
- 心肺復(fù)蘇課件2024
- 《城鎮(zhèn)燃?xì)忸I(lǐng)域重大隱患判定指導(dǎo)手冊》專題培訓(xùn)
- 湖南財(cái)政經(jīng)濟(jì)學(xué)院專升本管理學(xué)真題
- 全國身份證前六位、區(qū)號、郵編-編碼大全
- 2024-2025學(xué)年福建省廈門市第一中學(xué)高一(上)適應(yīng)性訓(xùn)練物理試卷(10月)(含答案)
- 《零售學(xué)第二版教學(xué)》課件
- 廣東省珠海市香洲區(qū)2023-2024學(xué)年四年級下學(xué)期期末數(shù)學(xué)試卷
- 房地產(chǎn)行業(yè)職業(yè)生涯規(guī)劃
- 江蘇省建筑與裝飾工程計(jì)價定額(2014)電子表格版
- MOOC 數(shù)字電路與系統(tǒng)-大連理工大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論