版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計任務(wù)書學(xué)生姓名: 專業(yè)班級: 指導(dǎo)教師: 工作單位: 題 目: 基于UDP的客戶/服務(wù)器通信程序設(shè)計 初始條件:操作系統(tǒng):XP開發(fā)語言:C+要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)1. 服務(wù)器端功能:接收并顯示客戶發(fā)送的信息,顯示該客戶IP地址和端口號,并向該客戶發(fā)送“I am a server. ”的信息。2. 客戶端功能:向服務(wù)器發(fā)送“I am a client.”的信息,接收并顯示從服務(wù)器收到的信息。課程設(shè)計報告主要內(nèi)容要求: (1) 給出設(shè)計思路;(2) 詳細(xì)描述設(shè)計過程, 畫出程序流程圖; (3) 列出程序代碼,并寫出程序注釋;(4)
2、 給出測試結(jié)果。(5) 查閱至少5篇參考文獻(xiàn)。(6) 按武漢理工大學(xué)課程設(shè)計工作規(guī)范要求撰寫設(shè)計報告書,圖紙應(yīng)符合繪圖規(guī)范。時間安排: 6月 日 查閱資料, 6月 日- 日 方案設(shè)計、編程6月 日 撰寫設(shè)計報告6月 日 答辯指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日1. 設(shè)計任務(wù)要求設(shè)計一個基于基于UDP的客戶/服務(wù)器通信程序設(shè)計1. 服務(wù)器端功能:接收并顯示客戶發(fā)送的信息,顯示該客戶IP地址和端口號,并向該客戶發(fā)送“I am a server. ”的信息。2. 客戶端功能:向服務(wù)器發(fā)送“I am a client.”的信息,接收并顯示從服務(wù)器收到的信息。2.基于UDP協(xié)
3、議(面向無連接)的socket編程原理Socket適用于網(wǎng)絡(luò)環(huán)境中的進(jìn)程問通信。它已成為當(dāng)前許多操作系統(tǒng)的網(wǎng)絡(luò)API,也是網(wǎng)絡(luò)操作系統(tǒng)中必不可少的基礎(chǔ)功能。隨著Linux操作系統(tǒng)和Internet的不斷發(fā)展Linux網(wǎng)絡(luò)環(huán)境下尤其是基于UDP的socket通信技術(shù)仍廣為注目。文章介紹了socket的編程原理并通過一個Java編寫的客戶服務(wù)器程序描述了網(wǎng)絡(luò)中基于UDP的不同主機(jī)上的兩個進(jìn)程之間的socket通信機(jī)制。2.1 Socket通信機(jī)制Socket(套接字)機(jī)制是一種API,是網(wǎng)絡(luò)應(yīng)用程序的編程接口。Socket是通過標(biāo)準(zhǔn)文件描述符和其它程序通訊的一個方法。每一個套接字都用一個半相關(guān)描述
4、:協(xié)議本地地址、本地端El來表示;一個完整的套接字則用一個相關(guān)描述:協(xié)議,本地地址、本地端El、遠(yuǎn)程地址、遠(yuǎn)程端口,每一個套接字都有一個本地的由操作系統(tǒng)分配的唯一的套接字號。根據(jù)傳輸數(shù)據(jù)類型的不同,Socket主要分為三類:1)流式Socket(SOCKSTREAM),在這種方式下,兩個通訊的應(yīng)用程序之聞要先建立一種虛擬的連接,提供可靠的、面向連接的通信流,它使用rcP協(xié)議。從而保證了數(shù)據(jù)傳輸?shù)恼_性和順序的。2)數(shù)據(jù)報Socket(SOCKDGRAM),它使用數(shù)據(jù)報協(xié)議UDP,定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨(dú)立的報文進(jìn)行傳輸,是無序的,并且不保證可靠、無差錯。3)原始Socket,原始
5、套接字允許對底層協(xié)議如IP或ICMP直接訪問,它功能強(qiáng)大但使用較為不便,主要用于一些協(xié)議的開發(fā)。22 UDP協(xié)議的工作原理UDP協(xié)議是一個面向無連接的協(xié)議。其連接的建立不必像TCP那樣需要服務(wù)器端偵聽,也不需要有客戶機(jī)請求連接,屬于一種“強(qiáng)制”性的網(wǎng)絡(luò)連接。UDP提供一對一或一對多的、無連接的數(shù)據(jù)報服務(wù)。該服務(wù)對消息中傳輸?shù)臄?shù)據(jù)提供不可靠的、最大努力的傳送,這意味著它不保證數(shù)據(jù)的到達(dá),也不保證所傳送的數(shù)據(jù)報的順序是否正確,UDP不重新傳輸丟失的數(shù)據(jù)。其主要工作是:將應(yīng)用程序傳輸過來的數(shù)據(jù)分塊交給網(wǎng)絡(luò)層,確認(rèn)接受到分組信息。盡管UDP無法像TCP一樣提供可靠的數(shù)據(jù)傳輸,但UDP并不比TCP缺乏優(yōu)
6、越性。UDP在傳輸效率方面比TCP要高一些,而且許多應(yīng)用程序并不需要保證嚴(yán)格的傳輸可靠性,比如視頻會議系統(tǒng)等,需要實時的交互,但并不要求音頻視頻的絕對正確。使用UDP協(xié)議傳輸數(shù)據(jù)時,首先設(shè)置客戶計算機(jī)的local Port(本地端E1)屬性,而作為服務(wù)器的計算機(jī)只需要設(shè)置RemoterHost(遠(yuǎn)程主機(jī))屬性為客戶計算機(jī)的IP地址或域名即可,并將其Remote Port屬性設(shè)置為客戶計算機(jī)上的Local Port屬性。使用UDP端口號時,端口提供了用于發(fā)送消息的位黃,每個端口由一個唯一的編號來標(biāo)識。當(dāng)應(yīng)用程序向另一臺計算機(jī)發(fā)送數(shù)據(jù)時,UDP生成一個數(shù)據(jù)頭。包括源端口,這些端口提供送達(dá)信息所需要
7、的地址。UDP協(xié)議還為數(shù)據(jù)和數(shù)據(jù)頭計算出求和檢驗的值,在目標(biāo)計算機(jī)中,數(shù)據(jù)包被傳遞至UDP協(xié)議程序并送到目的地端口。2.2.1服務(wù)器端(接收端)程序設(shè)計步驟:1).加載套接字庫2).創(chuàng)建套接字(socket)3).將套接字綁定到一個本地地址和端口上(bind)4).等待接收數(shù)據(jù)(recvfrom)5).關(guān)閉套接字(closesocket)2.2.2客戶端(發(fā)送端)程序設(shè)計步驟:1).加載套接字庫2).創(chuàng)建套接字(socket)3).向服務(wù)器發(fā)送數(shù)據(jù)(sendto)4).關(guān)閉套接字(closesocket)Socket(),建立數(shù)據(jù)報式套接字,返回套接字號ssocket(),建立數(shù)據(jù)報式套接字,
8、返回套接字號s服務(wù)器方客戶方Bind(),將套接字s與本地的地址相連bind(),將套接字s 與本地地址相連相連Sendto()/recvfrom,通過套接字s交換數(shù)據(jù)recvfrom()/sendto(),通過套接字s 讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完。closesocket(),關(guān)閉套接字s,結(jié)束服務(wù)Closesocket(),關(guān)閉套接字,結(jié)束對話圖1-1 無連接協(xié)議的套接字調(diào)用時序圖2.3.程序流程圖2.3.1客戶端程序流程圖開始加載套接字(winsock)庫創(chuàng)建socket()套接字,設(shè)置客戶端IP和端口號輸入信息gets(sendBuf);Sendto();發(fā)送數(shù)據(jù)到servrecvfro
9、m=SOCKET_ERROR printf(error:%d,errCode)break;退出循環(huán) YNrecvBuf0=qprintf(the chat end!);break;退出循環(huán) Y Nclosesocket(sockClient);WSACleanup();輸出接收到的信息結(jié)束圖2-1 客戶端程序流程圖2.3.2服務(wù)器程序流程圖開始加載套接字(winsock)庫創(chuàng)建socket()設(shè)置服務(wù)器端的地址結(jié)構(gòu)和相關(guān)屬性將套接字和服務(wù)器地址結(jié)構(gòu)綁定,bind();從客戶端接受數(shù)據(jù)result=recvfrom();result=SOCKET_ERRORprintf(error:%d,err
10、Code)break;退出循環(huán) NYrecvBuf0=qprintf(the chat end!);break;退出循環(huán) NY輸出客戶端發(fā)來的信息Sprintf();printf();closesocket(sockClient);WSACleanup();結(jié)束gets(sendBuf);輸入信息sendto();將信息發(fā)送給客戶端圖2-2 服務(wù)器程序流程圖2.4.創(chuàng)建基于UDP協(xié)議的程序設(shè)計所涉及的相關(guān)函數(shù)說明2.4.1.int WSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData):作用是加載套接字庫和進(jìn)行套接字庫的版本協(xié)商a.參數(shù)wVer
11、sionRequested:用于指定準(zhǔn)備加載的Winsock庫的版本,高位字節(jié)指定所需要的Winsock庫的副版本,低位字節(jié)則是主版本,可用MAKEWORD(X,Y)(其中,x為高位字節(jié),y為低位字節(jié))方便獲得wVersionRequested的正確值。b.參數(shù)lpWSAData:指向WSADATA結(jié)構(gòu)的指針,WSAStartup用其加載的庫版本有關(guān)的信息填在這個結(jié)構(gòu)中應(yīng)用程序在使用套接字前,首先必須擁有一個套接字,系統(tǒng)調(diào)用socket()向應(yīng)用程序提供創(chuàng)建套接字的手段2.4.2.SOCKET socket(int af,int type,int protocol):a.該調(diào)用要接收三個參數(shù):
12、af、type、protocol。參數(shù)af 指定通信發(fā)生的區(qū)域,UNIX 系統(tǒng)支持的地址族有:AF_UNIX、AF_INET、AF_NS 等,而DOS、WINDOWS 中僅支持AF_INET,它是網(wǎng)際網(wǎng)區(qū)域。因此,地址族與協(xié)議族相同。b.參數(shù)type指定Socket類型,對于1.1版本的Socket,它只支持兩種類型的套接字,SOCK_STREAM指定產(chǎn)生流式套接字,SOCK_DGRAM產(chǎn)生數(shù)據(jù)報套接字。c.參數(shù)protocol與特定的地址家族相關(guān)的協(xié)議,如果指定為0,那么他就會根據(jù)地址格式和套接字類別,自動為你選擇一個合適的協(xié)議。這是推薦使用的一種選擇協(xié)議的方式。2.4.3. int bin
13、d(SOCKET s,const struct sockaddr FAR *name,int namelen) :a.第一個參數(shù)指定要綁定的套接字,第二個參數(shù)指定該套接字的本地地址信息,是指向sockaddr結(jié)構(gòu)的指針變量,由于該地址結(jié)構(gòu)是為了所有的地址家族準(zhǔn)備使用的,這個結(jié)構(gòu)可能(通常會)隨使用的網(wǎng)絡(luò)協(xié)議不同而不同,所以,要用第三個參數(shù)指定該地址結(jié)構(gòu)的長度。sockaddr機(jī)構(gòu)定義如下:struct sockaddru_short sa_family;char sa_data14;b.上述結(jié)構(gòu)第一個字段指定該地址家族,在這里必須設(shè)為AF_INET。sa_data僅僅是表示要求一塊內(nèi)存分配區(qū),
14、起到占位的作用,該區(qū)域中指定與協(xié)議相關(guān)的具體地址信息。由于實際要求的只是內(nèi)存區(qū),所以對于不同的協(xié)議家族,用不同的結(jié)構(gòu)來替換sockaddr。在TCP/IP中,我們可以用SOCKADDR_IN結(jié)構(gòu)來代替sockaddr,以方便我們填寫地址信息。c.struct SOCKADDR_INshortsin_family;unsigned shortsin_port;structin_addrsin_addr;charsin_zero8;sin_family表示地址族,對于IP地址,sin_family成員將一直是AF_INET;成員sin_port指定的將要分配給套接字的端口;成員sin_addr給出
15、的是套接字的主機(jī)IP地址;sin_zero只是一個填充數(shù),以使sockaddr_in結(jié)構(gòu)和sockaddr結(jié)構(gòu)的長度一樣,一般不用設(shè)置。除了sin_family外,SOCKADDR_IN其他成員是按網(wǎng)絡(luò)字節(jié)順序表示的。所以需要進(jìn)行轉(zhuǎn)換:htonl(INADDR_ANY),htons(6000),其中6000是端口號。另外結(jié)構(gòu)體的名稱大寫和小寫指的是同一個。將IP地址指定為INADDR_ANY,允許套接字向任何分配給本機(jī)器的IP地址發(fā)送或接收數(shù)據(jù)。一般一臺機(jī)器一個網(wǎng)卡,但對于多網(wǎng)卡的機(jī)器,INADDR_ANY將簡化應(yīng)用程序的編寫。將地址指定為INADDR_ANY,允許一個獨(dú)立的應(yīng)用接受發(fā)自多個接
16、口的回應(yīng)。如果我們只想讓套接字使用多個IP中的一個地址,必須指定實際地址,要做到這一點(diǎn),可以用inet_addr()函數(shù),這個函數(shù)需要一個IP地址(如8),返回一個適合分配給S_addr的u_long類型的數(shù)值。Inet_ntoa()函數(shù)完成相反的轉(zhuǎn)換,它接受一個in_addr結(jié)構(gòu)體類型的參數(shù)并返回一個以點(diǎn)分十進(jìn)制的IP地址字符串。htonl把一個u_long類型從主機(jī)字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序。htons把一個u_short類型從主機(jī)字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序。2.4.4.send函數(shù):向客戶端發(fā)送指定信息2.4.5.recv函數(shù):得到從客戶端傳遞過來的信息2.4.6.clo
17、sesocket(SOCKET s):將指定的套接字關(guān)閉,從而釋放資源2.4.7.WSACleanup():終止對winsocket庫的使用3.程序調(diào)試與編譯運(yùn)行結(jié)果3.1程序調(diào)試按照設(shè)計要求編寫好程序后,開始對程序進(jìn)行調(diào)試,由于程序不是很長,因此調(diào)試過程也較為順利,不過在調(diào)試過程中還是遇到了不少問題:3.1.1.由于對socket編程不熟悉,開始時環(huán)境變量沒有設(shè)置好,編譯時總是出現(xiàn)error LNK2001;經(jīng)過查資料得知是因為沒有在環(huán)境變量設(shè)置中添加 “ws2_32.lib”,添加后編譯就不會出現(xiàn)上面的錯誤了;3.2.2.由于對socket的庫函數(shù)不熟悉,對其中的各種函數(shù)誤用,導(dǎo)致程序出錯
18、;3.2程序編譯運(yùn)行 調(diào)試好程序后,對其進(jìn)行編譯運(yùn)行,其運(yùn)行結(jié)果如下:圖3-1 客戶端發(fā)送數(shù)據(jù),服務(wù)器接收到數(shù)據(jù)圖3-2服務(wù)器向客戶端回復(fù)數(shù)據(jù),客戶端接收到數(shù)據(jù)4.設(shè)計總結(jié)與體會 本課程設(shè)計設(shè)計了一個基于UDP的客戶/服務(wù)器通信程序,并用C+語言編程實現(xiàn)了基本功能,該程序能實現(xiàn)從客戶端向服務(wù)器發(fā)送數(shù)據(jù),服務(wù)器能接收并正確顯示客戶端的IP地址和端口以及接收到的數(shù)據(jù),而且還能向客戶端發(fā)送數(shù)據(jù),客戶端也能正確接收并顯示出來。通過本次課程設(shè)計,我對通過socke編程有了進(jìn)一步的理解,也學(xué)到了很多知識,對通信的底層知識有了進(jìn)一步的了解,并對UDP協(xié)議的通信有了深刻的理解,之前只知道有UDP這個協(xié)議,不知
19、道他的原理,現(xiàn)在通過本次設(shè)計,明白了UDP通信的原理以及如何通過編程來實現(xiàn)。總之這次課設(shè)我收獲很大。參考文獻(xiàn)1陳偉,劉會衡.計算機(jī)網(wǎng)絡(luò)與通信.北京:電子工業(yè)出版社,2010.2謝希仁.計算機(jī)網(wǎng)絡(luò)(5).北京:電子工業(yè)出版社,2008.3楊家海.網(wǎng)絡(luò)管理原理與實用技術(shù).北京:清華大學(xué)出版社,2002.4王艷平.windows網(wǎng)絡(luò)與通信程序設(shè)計.北京:人民郵電出版社,2009.5李媛媛.Visaul C+網(wǎng)絡(luò)通信開發(fā)入門與編程實踐.北京:電子工業(yè)出版社,2008. 在VC中的工程設(shè)置中的連接下面的ws2_32.lib,否則程序運(yùn)行錯誤客戶端源程序#include winsock2.h#includ
20、e stdio.hvoid main() /加載套接字(winsock)庫,加載這段代碼拷貝于MSDN中WSAStartup的介紹 WORD wVersionRequested;/定義一個unsigned short類型的變量 WSADATA wsaData;/typedef struct WSAData 定義一個WSADATA結(jié)構(gòu)體 int err; wVersionRequested = MAKEWORD( 1, 1 ); /版本號為1.1 err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return; if
21、 ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return; /創(chuàng)建套接字SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0); /SOCK_DGRAM為UDP傳輸方式 /typedef u_int SOCKET; SOCKADDR_IN addrServer; /服務(wù)器地址結(jié)構(gòu) typedef struct sockaddr_in SOCKADDR_IN addrServer.sin_addr.S_un.S_addr=inet_
22、addr(); /服務(wù)器地址 addrServer.sin_family=AF_INET; addrServer.sin_port=htons(6000); /服務(wù)器端口號 char tempBuf1000; char recvBuf1000;/定義接收緩沖數(shù)組 char sendBuf1000;/定義發(fā)送緩沖數(shù)組 int len=sizeof(SOCKADDR);/求SOCKADDR長度 while(1) printf(plese input the message:n); gets(sendBuf); /得到用戶的鍵盤輸入 sendto(sockClient,sendBu
23、f,strlen(sendBuf)+1,0,(SOCKADDR*)&addrServer,sizeof(SOCKADDR); int result=recvfrom(sockClient,recvBuf,1000,0,(SOCKADDR*)&addrServer,&len); if(result=SOCKET_ERROR) int errCode=WSAGetLastError(); printf(error:%d,errCode); break; /退出循環(huán) else if(recvBuf0=q) /對方請求退出 /同樣將退出請求發(fā)送回去 sendto(sockClient,q,strlen
24、(q)+1,0,(SOCKADDR*)&addrServer,sizeof(SOCKADDR); printf(the chat end!); for(int i=0;i65536;i+) for(int j=0;j5000;j+); break; else /將對方發(fā)送過來的信息前段加上IP地址進(jìn)行輸出 sprintf(tempBuf,massege from server aid:%s,recvBuf);/sprintf(tempBuf,%s aid:%s,inet_ntoa(addrServer.sin_addr),recvBuf); printf(%sn,tempBuf); close
25、socket(sockClient); WSACleanup();服務(wù)器源程序#include winsock2.h#include stdio.h void main() /加載套接字(winsock)庫,加載這段代碼拷貝于MSDN中WSAStartup的介紹 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); /版本號為1.1 err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return
26、; if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return; /創(chuàng)建套接字 SOCKET sockServer=socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN addrServer; /設(shè)置服務(wù)器端套接字的地址結(jié)構(gòu)的相關(guān)屬性 addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY); /設(shè)置IP addrServer.sin_family=AF_INET; addrServer.sin
27、_port=htons(6000); /設(shè)置端口號 /將套接字和服務(wù)器地址結(jié)構(gòu)綁定 bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); char recvBuf100; char tempBuf100; char sendBuf100; while(1) /從客戶端接收數(shù)據(jù) int result=recvfrom(sockServer,recvBuf,100,0,(SOCKADDR*)&addrClient,&len); if(res
28、ult=SOCKET_ERROR) int errCode=WSAGetLastError(); printf(error:%d,errCode); break; /退出循環(huán) else if(recvBuf0=q) /對方請求退出 /同樣將退出請求發(fā)送回去 sendto(sockServer,q,strlen(q)+1,0,(SOCKADDR*)& addrClient,sizeof(SOCKADDR); printf(the chat end!); for(int i=0;i65536;i+) for(int j=0;j5000;j+); break; else /將對方發(fā)送過來的信息前段加
29、上IP地址進(jìn)行輸出/htons(addrCli.sin_port) sprintf(tempBuf,%s %d said:%s,inet_ntoa(addrClient.sin_addr),htons(addrServer.sin_port),recvBuf); printf(%sn,tempBuf); /將用戶的鍵盤輸入發(fā)送到對方 printf(pleas input the message:n); gets(sendBuf); /得到鍵盤輸入內(nèi)容 sendto(sockServer,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)& addrClient,sizeof(SOCKADDR); closesocket(sockServer); WSACleanup(); tgKQcWA3PtGZ7R4I30kA1DkaGhn3XtKknBYCUDxqA7FHYi2CHhI92tgKQcWA3PtGshLs5
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初二數(shù)學(xué)學(xué)習(xí)法模板
- 夜間照明專項施工方案
- 鞋面制作課程設(shè)計
- 運(yùn)輸機(jī)器人課程設(shè)計
- 2024年醫(yī)院設(shè)備采購管理制度
- 2025年度智能建筑打樁施工技術(shù)服務(wù)合同4篇
- 2025年度租賃住宅用電安全保障合同樣本4篇
- 2025年消防應(yīng)急照明與疏散指示系統(tǒng)三方合同范文3篇
- 二零二五版離婚協(xié)議書起草與子女撫養(yǎng)權(quán)變更執(zhí)行監(jiān)督協(xié)議書4篇
- 銷售部培訓(xùn)課程設(shè)計
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- 小學(xué)道德與法治學(xué)科高級(一級)教師職稱考試試題(有答案)
- 申請使用物業(yè)專項維修資金征求業(yè)主意見表
- 河北省承德市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 實用性閱讀與交流任務(wù)群設(shè)計思路與教學(xué)建議
- 應(yīng)急柜檢查表
- 通風(fēng)設(shè)施標(biāo)準(zhǔn)
- 酒店市場營銷教案
- 房屋買賣合同簡單范本 房屋買賣合同簡易范本
- 無抽搐電休克治療規(guī)范
- 環(huán)保有限公司營銷策劃方案
評論
0/150
提交評論