




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
TCP/IP協(xié)議及網(wǎng)絡編程技術第7章套接字編程2017年4月主要內容客戶機/服務器模型套接字概念套接字編程基礎WinSock函數(shù)基于TCP的應用編程基于UDP的應用編程學習目標理解客戶機/服務器模型的工作機理。掌握套接字的概念。掌握基于套接字的面向連接和無連接客戶機/服務器程序的設計原理,了解相關的WinSockAPI函數(shù)。通過程序實例,了解基于TCP和UDP的程序設計方法。客戶機/服務器模型客戶機/服務器模型的工作流程客戶機/服務器模型服務器程序特點一般啟動后就一直處于運行狀態(tài),以等待客戶機進程的請求;使用的端口往往是熟知端口,便于客戶機進程連接請求;一般擁有較多的系統(tǒng)資源,以便及時響應各個客戶機進程的請求;可以并行處理多個客戶機進程的請求,但數(shù)目是有一定的限制;在通信時一般處于被動的一方,不需要知道客戶機的IP地址和端口信息??蛻魴C/服務器模型客戶機程序特點在需要服務器進程的服務時將向服務器進程請求服務,并建立通信連接,得到滿足并完成處理后就終止通信連接;使用向系統(tǒng)申請的臨時端口與服務器進程進行通信,通信完成后將釋放該端口;擁有相對較少的系統(tǒng)資源;在通信時屬于主動的一方,需要事先知道服務器的IP地址和端口信息。套接字概念在網(wǎng)絡中要全局地標識一個參與通信的進程,需要采用三元組:協(xié)議、主機IP地址、端口號。要描述兩個應用進程之間的端到端的通信關聯(lián)則需要一個五元組:協(xié)議、信源機IP地址、信源應用進程端口、信宿機IP地址、信宿應用進程端口。套接字可以理解為通信連接的一端,其主要包括協(xié)議、主機IP地址和端口號。將兩個套接字連接到一起便可以在不同應用進程之間傳遞數(shù)據(jù)套接字實現(xiàn)了對網(wǎng)絡和傳輸層協(xié)議的封裝,為應用進程之間的通信連接的建立、數(shù)據(jù)傳輸?shù)韧ㄐ胚^程提供了編程界面。套接字概念使用套接字通信示意圖基于套接字的通信過程可以描述為:創(chuàng)建/打開套接字、向套接字收發(fā)數(shù)據(jù)、關閉套接字。套接字概念針對不同的通信需求,在TCP/IP中提供了3種不同套接字類型流套接字(SOCK_STREAM):用于提供面向連接、可靠的數(shù)據(jù)傳輸服務。該服務將保證數(shù)據(jù)能夠實現(xiàn)無差錯、無重復發(fā)送,并按順序接收。流套接字之所以能夠實現(xiàn)可靠的數(shù)據(jù)服務,原因在于其使用了傳輸控制協(xié)議——TCP。這類套接字中,傳輸數(shù)據(jù)之前必須在兩個應用進程之間建立一條通信連接,這就確保了參與通信的兩個應用進程都是活動并且響應的。當連接建立之后,應用進程只要通過套接字向TCP層發(fā)送數(shù)據(jù)流,而另一個應用進程便可以接收到相應的數(shù)據(jù)流,它們不需要知道傳輸層是如何對數(shù)據(jù)流進行處理。特別需要注意的是通信連接必須顯式建立。該套接字類型適合傳輸大量的數(shù)據(jù),但不支持廣播和多播方式。套接字概念針對不同的通信需求,在TCP/IP中提供了3種不同套接字類型(續(xù))數(shù)據(jù)報套接字(SOCK_DGRAM)提供了一種無連接的服務,通信雙方不需要建立任何顯式連接,數(shù)據(jù)可以發(fā)送到指定的套接字,并且可以從指定的套接字接收數(shù)據(jù)。該服務并不能保證數(shù)據(jù)傳輸?shù)目煽啃?,?shù)據(jù)有可能在傳輸過程中丟失或出現(xiàn)數(shù)據(jù)重復,且無法保證順序地接收到數(shù)據(jù)。數(shù)據(jù)報套接字使用UDP進行數(shù)據(jù)的傳輸。與數(shù)據(jù)報套接字相比,使用流式套接字是一個更為可靠的方法,但對于某些應用,建立一個顯式連接所導致的系統(tǒng)開銷是令人難以接收的,并且數(shù)據(jù)報套接字支持廣播和多播方式。套接字概念針對不同的通信需求,在TCP/IP中提供了3種不同套接字類型(續(xù))原始套接字(SOCK_RAW):與標準套接字(標準套接字指的是前面介紹的流套接字和數(shù)據(jù)報套接字)的區(qū)別在于:原始套接字可以讀寫內核沒有處理的IP數(shù)據(jù)包,而流套接字只能讀取TCP的數(shù)據(jù),數(shù)據(jù)報套接字只能讀取UDP的數(shù)據(jù)。使用原始套接字的主要目的是為了避開TCP/IP處理機制,被傳送的數(shù)據(jù)包可以被直接傳送給需要它的應用程序。因此,其主要是在編寫自定義底層協(xié)議的應用程序時使用,例如各種不同的TCP/IP實用程序(如ping和arp)都使用原始套接字實現(xiàn),也可以用來實現(xiàn)數(shù)據(jù)包捕捉分析等。套接字編程基礎從應用編程角度來看,套接字就是TCP/IP網(wǎng)絡編程接口的集合,它是應用程序與TCP/IP協(xié)議族通信的中間軟件抽象層,其中包含了許多函數(shù)或例程,程序員可以用它們來開發(fā)網(wǎng)絡應用程序套接字編程基礎面向連接的客戶機/服務器程序工作模型套接字編程基礎面向連接的客戶機/服務器程序工作模型服務器進程的五元組建立由socket函數(shù)確定所使用的協(xié)議。由bind函數(shù)實現(xiàn)與本地IP和端口號的綁定,即確定本地IP和端口號。由accept函數(shù)實現(xiàn)與遠程IP地址和端口號的關聯(lián),即確定遠程IP和端口號??蛻魴C進程五元組建立由socket函數(shù)確定所使用的協(xié)議。由bind函數(shù)實現(xiàn)與本地IP和端口號的綁定,其中本地IP和端口號既可以顯式指定也可以由系統(tǒng)自動確定。由connect函數(shù)實現(xiàn)與遠程IP地址和端口號的關聯(lián),即確定遠程IP和端口號。套接字編程基礎無連接的客戶機/服務器程序工作模型套接字編程基礎無連接的客戶機/服務器程序工作模型在編寫無連接客戶機/服務器模型的程序時,與面向連接不同:通信的一方可以不用bind函數(shù)綁定IP地址和端口,而由系統(tǒng)自動分配,但充當服務器的一方需事先綁定IP地址和端口。不綁定IP地址和端口的一方必須首先向綁定IP地址和端口的一方發(fā)送數(shù)據(jù),即充當客戶機進程。無連接應用進程也可以調用connect函數(shù),但它不是用來向通信對方發(fā)出建立連接的請求,只是告訴內核并由內核保存,以便在數(shù)據(jù)傳輸過程中可以使用send和recv函數(shù)。在無連接的數(shù)據(jù)報傳輸過程中,雖然沒有顯式指定服務器方和客戶機方,但是作為服務器的應用進程也必須先啟動,否則客戶機進程的請求傳不到服務器進程;在無連接的數(shù)據(jù)傳輸過程中,客戶和服務器進程無需事先建立通信連接,這樣當發(fā)送數(shù)據(jù)時,發(fā)送方除了指定本地套接字的地址外,還需要指定接收方的套接字地址,即在數(shù)據(jù)收發(fā)過程中動態(tài)建立通信雙方的通信連接。套接字編程基礎常用的套接字API套接字編程基礎套接字編程相關數(shù)據(jù)結構sockaddr數(shù)據(jù)結構用于保存套接字的地址信息,具體定義如下:structsockaddr{unsignedshortsa_family;charsa_data[14]};其中:sa_family:用于指定地址族,如果是TCP/IP通信,該值取PF_INET和AF_NET;sa_data:用于保存套接字的IP地址和端口號信息。套接字編程基礎套接字編程相關數(shù)據(jù)結構sockaddr_in數(shù)據(jù)結構與sockaddr類似,該結構體定義如下:structsockaddr_in{shortintsin_family;unsignedshortintsin_port;structin_addrsin_addr;unsignedcharsin_zero[8];};其中:sin_family:用于指定地址族,如果是TCP/IP通信,該值取PF_INET和AF_NET;sin_port:套接字通信的端口號;sin_addr:通信的IP地址;sin_zero[8]:用以填充0,保持與structsockaddr同樣大小。套接字編程基礎套接字編程相關數(shù)據(jù)結構由于sockaddr數(shù)據(jù)結構與sockaddr_in數(shù)據(jù)結構的大小是相同的,指向sockaddr_in的指針可以通過強制轉換,轉換成指向sockaddr結構的指針。套接字編程基礎網(wǎng)絡字節(jié)順序不同體系的CPU在內存中的數(shù)據(jù)存儲往往存在差異。如Intel的x86系列處理器將低序字節(jié)存儲在起始地址,而一些RISC架構的處理器,如IBM的370主機使用的PowerPC或Motorola公司生產的CPU,都將高序字節(jié)存儲在起始位置。這兩種不同的存儲方式被稱為低位優(yōu)先(little-endian)和高位優(yōu)先(big-endian)。對于網(wǎng)絡上的字節(jié)表示法有一個標準——網(wǎng)絡字節(jié)順序,它與高位優(yōu)先相同。以便于不同體系結構的計算機間的通信。WinSock函數(shù)WinSock是一個基于套接字模型的API,在MicrosoftWindows操作系統(tǒng)類中使用。它在Berkeley接口函數(shù)的基礎之上,還增加了基于消息驅動機制的Windows擴展函數(shù)。WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)WSAStartup函數(shù)功能:用于初始化WinSock,即檢查系統(tǒng)中是否有WindowsSockets的實現(xiàn)庫。格式:intWSAStarup(WORDwVersionRequested,LPWSADATAlpWSAData);參數(shù):wVersionRequested,要求使用WinSock的最低版本號,高位字節(jié)指定副版本,低位字節(jié)指定主版本;lpWSAData,WinSock的詳細資料返回值:成功調用返回0,不成功返回非0值說明:應用程序調用的第一個WinSock函數(shù),只有成功調用之后才能調用其他函數(shù)WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)socket函數(shù)功能:為應用程序創(chuàng)建套接字。格式:SOCKETsocket(intaf,inttype,intprotocol);參數(shù):af:使用的協(xié)議地址族,如果是TCP/IP,值為AF_INETtype:套接字的協(xié)議類型,SOCKET_STREAM(TCP),SOCK_DGRAM(UDP)Protocol:說明套接字使用的特定協(xié)議,如果不希望特別指定,可設為0。系統(tǒng)可根據(jù)前兩個確定使用的協(xié)議類型返回值:成功調用返回一個套接字標識,失敗返回INVALID_SOCKET說明:通信前,必須通過調用此函數(shù)創(chuàng)建一個套接字WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)bind函數(shù)功能:實現(xiàn)套接字與主機本地IP地址和端口號的綁定。格式:intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);參數(shù):s:未綁定的套接字標識name:與指定協(xié)議有關的地址結構指針,sockaddr的結構如前所示namelen:指定的name參數(shù)的長度返回值:成功調用返回0,失敗返回SOCKET_ERROR說明:如果應用程序不關心地址,可以設為INADDR_ANY,端口號設為0,系統(tǒng)自動分配1000-5000之間的唯一端口號。可通過getsockname()獲知所分配的地址WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)listen函數(shù)功能:將套接字設定為偵聽狀態(tài),準備接收由客戶機進程發(fā)出的連接請求。格式:intlisten(SOCKETs,intbacklog);參數(shù):s:已綁定地址,但還沒建立連接的套接字標識backlog:指定正在等待連接的最大隊列長度返回值:成功調用返回0,失敗返回SOCKET_ERROR說明:僅適用于面向連接的套接字,用于服務器進程WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)connect函數(shù)功能:提出與一個服務器進程建立連接的請求,如果服務器進程接受請求,則服務器進程與客戶機進程之間便建立一條通信連接。格式:intconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);參數(shù):s:建立連接的套接字標識name:指向通信對方的套接字地址結構的指針,表示s欲與其進行連接namelen:name參數(shù)的長度返回值:成功返回0,失敗返回SOCKET_ERROR說明:客戶機進程調用此函數(shù)激發(fā)建立連接的3次握手。如果之前沒有綁定套接字,則系統(tǒng)自動綁定。WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)accept函數(shù)功能:接受由客戶機進程調用connect函數(shù)發(fā)出的連接請求。格式:SOCKETaccept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen);參數(shù):s:處于偵聽狀態(tài)的套接字標識addr:存放發(fā)出連接請求的客戶機進程IP地址信息的地址結構指針addrlen:addr的長度返回值:成功時返回一個新的套接字標識,失敗時返回INVALID_SOCKET說明:用于面向連接的服務器進程WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)shutdown函數(shù)功能:關閉套接字讀寫通道,即停止套接字接收/傳送的功能。格式:intshutdown(SOCKETs,inthow);參數(shù):
s:套接字標識how:描述停止哪些操作值為0,則不再接收資料值為1,則不再允許傳送資料值為2,則不再接收且不再傳送資料返回值:成功返回0,失敗返回SOCKET_ERROR說明:只是停止套接字的接收或傳送功能,并沒有關閉套接字WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)closesocket函數(shù)功能:關閉套接字,釋放與套接字關聯(lián)的所有資源格式:intclosesocket(SOCKETs);參數(shù):s:將要關閉的套接字標識返回值:成功返回0,失敗返回SOCKET_ERROR說明:套接字設定為SO-DONTLINGER,則等數(shù)據(jù)緩沖隊列中的數(shù)據(jù)傳輸完畢之后關閉套接字套接字設定為SO-LINGER,按兩種情況處理:Timeout為0,套接字馬上關閉,數(shù)據(jù)丟失Timeout不為0,則等數(shù)據(jù)傳輸完畢或Timeout為0時關閉套接字WinSock函數(shù)套接字與通信連接的建立與關閉函數(shù)WSACleanup函數(shù)功能:終止使用WinSock,釋放為應用程序分配的相關資源。格式:intWSACleanup();參數(shù):無參數(shù)返回值:成功返回0,失敗返回非0值說明:任何基于WinSock的應用程序在最后必須調用的函數(shù)WinSock函數(shù)數(shù)據(jù)傳輸函數(shù)recv函數(shù)功能:在已建立連接的套接字上接收數(shù)據(jù)。格式:intrecv(SOCKETs,charFAR*buf,intlen,intflags);參數(shù):s:已建立連接的套接字標識buf:存放接收到的數(shù)據(jù)的緩沖區(qū)指針len:buf的長度flags:調用操作方式(0,MSG_PEEK,MSG_OOB)返回值:接收成功時,返回所接收到的數(shù)據(jù)長度,連接結束時返回0,接收失敗時返回SOCKET_ERROR說明:用于在已建立連接的流式或數(shù)據(jù)報套接字上接收數(shù)據(jù)WinSock函數(shù)數(shù)據(jù)傳輸函數(shù)recvfrom函數(shù)功能:在無連接的套接字上接收數(shù)據(jù)。格式:intrecvfrom(SOCKETs,charFAR*buf,intlen,intflags,structsocketaddrFAR*from,intFAR*fromlen);參數(shù):s:套接字標識buf:接收數(shù)據(jù)緩沖區(qū)len:buf的長度flags:調用操作方式,與recv中的flags相同from:指向存儲有源地址的socketaddr緩沖區(qū)的指針fromlen:from緩沖區(qū)的大小
返回值:接收成功時,返回所接收到的數(shù)據(jù)長度,連接結束時返回0,接收失敗時返回SOCKET_ERROR說明:也可以用于面向連接的據(jù)接收操作,與recv作用相同WinSock函數(shù)數(shù)據(jù)傳輸函數(shù)send函數(shù)功能:在已建立連接的套接字上發(fā)送數(shù)據(jù)。格式:intsend(SOCKETs,constcharFAR*buf,intlen,intflags);參數(shù):s:套接字標識buf:發(fā)送數(shù)據(jù)緩沖區(qū)len:buf的長度flags:用于控制數(shù)據(jù)傳輸方式(0,MSG_DONTROUTE,MSG_OOB)返回值:發(fā)送成功時,返回所發(fā)送的數(shù)據(jù)長度,連接結束時返回0,發(fā)送失敗時返回SOCKET_ERROR說明:用于在已建立連接的流式或數(shù)據(jù)報套接字上發(fā)送數(shù)據(jù)WinSock函數(shù)數(shù)據(jù)傳輸函數(shù)sendto函數(shù)功能:在無連接套接字上發(fā)送數(shù)據(jù)。格式:intsendto(SOCKETs,constcharFAR*buf,intlen,intflags,conststructsockaddrFAR*to,inttolen);參數(shù):s:套接字標識buf:發(fā)送數(shù)據(jù)緩沖區(qū)首地址len:buf的長度flags:發(fā)送方式標志位,與send函數(shù)相同to:目的套接字的地址tolen:目的套接字地址to大小返回值:發(fā)送成功時,返回所發(fā)送的數(shù)據(jù)長度,連接結束時返回0,發(fā)送失敗時返回SOCKET_ERROR說明:主要用于無連接的套接字WinSock函數(shù)其他相關函數(shù)setsockopt函數(shù)功能:設定套接字的狀態(tài)格式:intsetsockopt(SOCKETs,intlevel,intoptname,constcharFAR*optval,intoptlen);參數(shù):s:套接字標識level:選定定義的層次(SOL_SOCKET,IPPROTO_IP,IPPROTO_TCP)optname:選項名稱optval:選項的設定值optlen:選項設定值的長度返回值:成功返回0,失敗返回SOCKET_ERROR說明:用于任意類型、任意狀態(tài)套接字的設置選項值WinSock函數(shù)其他相關函數(shù)setsockopt函數(shù)SOL_SOCKET選項級別選項值類型說明SO_ACCEPTCONN布爾值如為TRUE(真),表明套接字處于監(jiān)聽模式SO_BROADCAST布爾值如TRUE,表明套接字已配置成對廣播消息進行發(fā)送SO_CONNECT_TIME整數(shù)返回套接字建立連接的時間,以秒為單位,如尚未連接,返回0xffffffff(微軟專用)SO_DEBUG布爾值如果TRUE,就允許調試輸出(W32不支持)
SO_DONTLINGER布爾值如果是TRUE,則禁用SO_LINGERSO_LINGERstructlinger設置或獲取當前的拖延值SO_DONTROUTE布爾值如果TRUE,便直接向網(wǎng)絡接口發(fā)送消息,毋需查詢路由表(微軟無效)SO_ERROR布爾值返回錯誤狀態(tài)SO_EXCLUSIVEADDRUSE布爾值如果TRUE,套接字綁定那個本地端口就不能重新被另一個進程使用SO_KEEPALIVE布爾值如果TRUE,套接字就會進行配置,在會話過程中發(fā)送”保持活動”消息SO_MAX_MSG_SIZE無符號整數(shù)對一個面向消息的套接字來說,一條消息的最大長度SO_OOBINLINE布爾值如果是TRUE,帶外數(shù)據(jù)就會在普通數(shù)據(jù)流中返回(W32不支持)
SO_PROTOCOL_INFOWSAPROTOCOL_INFO套接字綁定的那種協(xié)議的特征SO_RCVBUF整數(shù)面向接收操作,為每個套接字分別獲取或設置緩沖區(qū)長度SO_REUSEADDR布爾值如果是TRUE,套接字就可與一個正由其他套接字使用的地址綁定到一起,或與處在TIME_WAIT狀態(tài)的地址綁定到一起SO_SNDBUF布爾值設置分配給套接字的數(shù)據(jù)發(fā)送緩沖區(qū)的大小SO_TYPE整數(shù)返回指定套接字的類型(如SOCK_DGRAM和SOCK_STREAM等等)SO_SNDTIMEO整數(shù)獲取或設置套接字上的數(shù)據(jù)發(fā)送超時時間(以毫秒為單位)SO_RCVTIMEO整數(shù)獲取或設置與套接字上數(shù)據(jù)接收對應的超時時間值(以毫秒為單位)SO_UPDATE_ACCEPT_CONTEXTSOCKET更新SOCKET狀態(tài)WinSock函數(shù)其他相關函數(shù)getsockopt函數(shù)功能:獲取指定套接字上目前狀態(tài)設定的相關信息格式:intgetsockopt(SOCKETs,intlevel,intoptname,charFAR*optval,int*optlen);參數(shù):s:套接字標識level:選定定義的層次(SOL_SOCKET,IPPROTO_IP,IPPROTO_TCP)optname:選項名稱optval:選項的設定值optlen:選項設定值的長度返回值:成功返回0,失敗返回SOCKET_ERROR說明:用于獲取目前套接字的某些狀態(tài)設定值WinSock函數(shù)其他相關函數(shù)htonl函數(shù)功能:將4字節(jié)主機字節(jié)順序的數(shù)轉換為網(wǎng)絡字節(jié)順序。格式:u_longhtonl(u_longhostlong);htons函數(shù)功能:將2字節(jié)主機字節(jié)順序的數(shù)據(jù)轉換為網(wǎng)絡字節(jié)順序。格式:u_shorthtons(u_shorthostshort);ntohl函數(shù)功能:4字節(jié)網(wǎng)絡字節(jié)順序的數(shù)轉換為主機字節(jié)順序。格式:u_longntohl(u_longnetlong);WinSock函數(shù)其他相關函數(shù)ntohs函數(shù)功能:將2字節(jié)網(wǎng)絡字節(jié)順序的數(shù)據(jù)轉換為主機字節(jié)順序。格式:u_shortntohs(u_shortnetshort);inet_addr函數(shù)功能:將點分十進制數(shù)表示的IP地址轉換為網(wǎng)絡字節(jié)順序的IP地址。格式:unsignedlonginet_addr(constchar*cp);inet_ntoa函數(shù)功能:將網(wǎng)絡字節(jié)順序表示的IP地址轉換為點分十進制數(shù)表示的IP地址。格式:char*FARinet_n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告場地服務合同范本
- 工程機器轉讓合同范本
- 遼寧省葫蘆島市2025屆九年級上學期期末數(shù)學試卷(含答案)
- 物流房租門面合同范本
- 私營公司工程合同范本
- 酒店管理轉讓合同范本
- 鍋爐安裝合同范本
- 第08講 一元一次不等式(組)的解法及其應用(4考點+19題型)2025年中考數(shù)學一輪復習講練測(廣東專用)
- 2025典當行借款合同書
- 預應力混凝土結構課程設計知到課后答案智慧樹章節(jié)測試答案2025年春青島理工大學
- 《礦產地質勘查規(guī)范 花崗偉晶巖型高純石英原料》(編制說明編寫要求)
- 《電子線路CAD》課程標準
- 《扁桃體摘除術》課件
- 市場推廣服務費合同
- NB-T 47013.15-2021 承壓設備無損檢測 第15部分:相控陣超聲檢測
- 濕地公園運營投標方案(技術標)
- 完整版新概念第一冊筆記(張云生)word版
- 白塞病診斷和治療課件
- 基準地價技術報告
- 靜安區(qū)實驗室施工方案模板
- 《上海奉賢區(qū)S村非機動車停放管理的調查報告》4200字
評論
0/150
提交評論