版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章套接字與數(shù)據(jù)流4.1套接字
4.1.1面向連接的套接字
4.1.2無(wú)連接的套接字4.2數(shù)據(jù)流
4.2.1文件流
4.2.2內(nèi)存流
4.2.3網(wǎng)絡(luò)流
4.2.4StreamWriter與StreamReader類
4.2.5BinaryReader與BinaryWriter類本章教學(xué)目的
學(xué)習(xí)套接字編程的基本方法,以及數(shù)據(jù)流相關(guān)類的用法。本章教學(xué)要求(1)掌握套接字的概念及Socket類用法;(2)掌握面向連接套接字編程、無(wú)連接套接字編程基本步驟(3)掌握FileStream、MemoryStream、NetworkStream類的用法;(4)掌握StreamReader、StreamWriter、BinaryReader、
BinaryWriter類的基本用法。本章重點(diǎn)4.1套接字一個(gè)連接由它的兩個(gè)端點(diǎn)標(biāo)識(shí),這樣的端點(diǎn)稱為套接字。4.1套接字(續(xù))套接字是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn)。上圖連接1的一對(duì)套接字為:(3,5000)和(22,8888)上圖連接2的一對(duì)套接字為:(3,5001)和(22,8888)對(duì)于UDP協(xié)議盡管兩個(gè)進(jìn)程之間沒(méi)有建立連接,但是也同樣存在發(fā)送端點(diǎn)和接收端點(diǎn),也同樣使用套接字的概念。4.1套接字(續(xù))套接字的類型有:流式套接字:提供了面向連接的、可靠的、數(shù)據(jù)無(wú)錯(cuò)并且無(wú)重復(fù)的數(shù)據(jù)發(fā)送服務(wù),而且接收數(shù)據(jù)的順序和發(fā)送數(shù)據(jù)的順序是相同的。數(shù)據(jù)報(bào)套接字:提供了面向無(wú)連接的服務(wù),它以獨(dú)立的數(shù)據(jù)包形式發(fā)送數(shù)據(jù)(數(shù)據(jù)包長(zhǎng)度不能大于32KB),不提供正確性檢查,也不保證各數(shù)據(jù)包的發(fā)送順序和接收順序相同,因此,可能出現(xiàn)數(shù)據(jù)的重發(fā)、丟失等現(xiàn)象。原始套接字:用于直接訪問(wèn)協(xié)議的較低層。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問(wèn)現(xiàn)有服務(wù)中配置的新設(shè)備,一般不提倡直接使用原始套接字。4.1套接字(續(xù))Socket類包含在System.Net.Sockets命名空間中。一個(gè)Socket實(shí)例包含了一個(gè)本地或者一個(gè)遠(yuǎn)程端點(diǎn)的套接字信息。使用Socket類編程,由于很多細(xì)節(jié)都需要自己考慮,相對(duì)來(lái)說(shuō)復(fù)雜一些,易出錯(cuò)。一般對(duì)套接字編程比較熟悉的人,或者使用非標(biāo)準(zhǔn)協(xié)議(自定義的新協(xié)議)進(jìn)行編程的時(shí)候,才使用Socket類。Socket類的構(gòu)造函數(shù)為:
publicSocket(
AddressFamilyaddressFamily,//網(wǎng)絡(luò)類型
SocketTypesocketType,//套接字類型
ProtocolTypeprotocolType);//使用的協(xié)議4.1套接字(續(xù))參數(shù)含義:(1)addressFamily addressFamily表示網(wǎng)絡(luò)類型,該參數(shù)使用AddressFamily枚舉指定Socket使用的尋址方案 例如AddressFamily.InterNetwork表示IP版本4的地址。4.1套接字(續(xù))4.1套接字(續(xù))(2)socketType socketTyp指定Socket的類型,該參數(shù)使用SocketType枚舉指定使用哪種套接字。例如:
SocketType.Stream表明連接是基于流套接字
SocketType.Dgram表示連接是基于數(shù)據(jù)報(bào)套接字
SocketType.Raw表示連接基于原始套接字;詳細(xì)見課本表4-4.1套接字(續(xù))(3)protocolType protocolType指定Socket使用的協(xié)議,該參數(shù)使用ProtocolType枚舉指定使用哪種協(xié)議。例如:ProtocolType.Tcp表明連接協(xié)議是TCPProtocolType.Udp表明連接協(xié)議是UDP詳細(xì)見課本表4-34.1套接字(續(xù))Socket構(gòu)造函數(shù)的三個(gè)參數(shù)中,對(duì)于網(wǎng)絡(luò)上的IP通信來(lái)說(shuō),AddressFamily總是使用AddressFamily.InterNetwork枚舉值。而SocketType參數(shù)則與ProtocolType參數(shù)配合使用,不允許其他的匹配形式,也不允許混淆匹配。下表列出了可用于IP通信的組合。
SocketTypeProtocolType說(shuō)明DgramUdp無(wú)連接通信StreamTcp面向連接的通信RawIcmpInternet控制報(bào)文協(xié)議RawRaw簡(jiǎn)單IP包通信4.1.1面向連接的套接字IP連接領(lǐng)域有兩種通信類型:面向連接的(connection-oriented)無(wú)連接的(connectionless)。根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過(guò)程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽客戶端請(qǐng)求連接確認(rèn)4.1.1面向連接的套接字服務(wù)器監(jiān)聽:是指服務(wù)器套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)??蛻舳苏?qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器套接字的地址和端口號(hào),然后再向服務(wù)器套接字提出連接請(qǐng)求。連接確認(rèn):是指當(dāng)服務(wù)器套接字監(jiān)聽到客戶端套接字的連接請(qǐng)求時(shí),它就響應(yīng)客戶端套接字的請(qǐng)求,把服務(wù)器套接字的信息發(fā)給客戶端,一旦客戶端確認(rèn)了此信息,連接即可建立。而服務(wù)器套接字繼續(xù)監(jiān)聽其他客戶端套接字的連接請(qǐng)求。4.1.1面向連接的套接字1.創(chuàng)建本地Socket2.調(diào)用Bind方法綁定到本地端點(diǎn)3.在指定端口監(jiān)聽Listen1.創(chuàng)建本地Socket2.Connect連接請(qǐng)求4.Accept()5.收發(fā)數(shù)據(jù)3.收發(fā)數(shù)據(jù)6.Close()4.Close()服務(wù)器客戶端4.1.1面向連接的套接字Socket()Bind()Listen()Accept()Receive()Send()Close()Socket()Connect()Send()Receive()Close()服務(wù)器端客戶端面向連接的套接字編程4.1.1面向連接的套接字同步TCP編寫服務(wù)器端程序的一般步驟為:
1)創(chuàng)建一個(gè)包含采用的網(wǎng)絡(luò)類型、數(shù)據(jù)傳輸類型和協(xié)議類型的本地套接字對(duì)象,并將其與服務(wù)器的IP地址和端口號(hào)綁定。這個(gè)過(guò)程可以通過(guò)Socket類。
2)在指定的端口進(jìn)行監(jiān)聽,以便接受客戶端連接請(qǐng)求。
3)一旦接受了客戶端的連接請(qǐng)求,就根據(jù)客戶端發(fā)送的連接信息創(chuàng)建與該客戶端對(duì)應(yīng)的Socket對(duì)象。
4)根據(jù)創(chuàng)建的Socket對(duì)象,分別與每個(gè)連接的客戶進(jìn)行數(shù)據(jù)傳輸。
5)根據(jù)傳送信息情況確定是否關(guān)閉與對(duì)方的連接。4.1.1面向連接的套接字
使用同步TCP編寫客戶端程序的一般步驟為:
1)創(chuàng)建一個(gè)包含傳輸過(guò)程中采用的網(wǎng)絡(luò)類型、數(shù)據(jù)傳輸類型和協(xié)議類型的Socket對(duì)象。
2)與遠(yuǎn)程服務(wù)器建立連接。
3)與服務(wù)器進(jìn)行數(shù)據(jù)傳輸。
4)完成工作后,向服務(wù)器發(fā)送關(guān)閉信息,并關(guān)閉與服務(wù)器的連接。4.1.1面向連接的套接字(續(xù))1.建立連接(服務(wù)器)IPHostEntrylocal=Dns.GetHostByName(Dns.GetHostName());IPEndPointiep=newIPEndPoint(local.AddressList[0],1180);SocketlocalSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);localSocket.Bind(iep);locatSocket.Listen(10);SocketclientSocket=localSocket.Accept();4.1.1面向連接的套接字(續(xù))1.建立連接(客戶端)IPAddressremoteHost=IPAddress.Parse("");IPEndPointiep=newIPEndPoint(remoteHost,1180);SocketlocalSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);localSocket.Connect(iep);4.1.1面向連接的套接字(續(xù))2.發(fā)送、接收信息(服務(wù)器)
…… SocketclientSocket=localSocket.Accept(); //建立連接后,利用Send方法向客戶端發(fā)送信息
clientSocket.Send(Encoding.ASCII.GetBytes("serversendHello")); //接收客戶端信息
byte[]myresult=newByte[1024]; intreceiveNum=clientSocket.Receive(myresult); Console.WriteLine("接收客戶端消息:{0}",Encoding.ASCII.GetString(myresult));4.1.1面向連接的套接字(續(xù))2.發(fā)送、接收信息(客戶端)//建立連接成功后,向服務(wù)器發(fā)送信息stringsendMessage="clientsendMessageHello"+DateTime.Now;localSocket.Send(Encoding.ASCII.GetBytes(sendMessage));Console.WriteLine("向服務(wù)器發(fā)送消息:{0}",sendMessage);//接收服務(wù)器信息byte[]result=newByte[1024];localSocket.Receive(result);Console.WriteLine("接收服務(wù)器消息:{0}",Encoding.ASCII.GetString(result));4.1.1面向連接的套接字(續(xù))3.關(guān)閉連接 通信完成后,必須先用Shutdown方法停止會(huì)話,然后關(guān)閉Socket實(shí)例。
例如:
sock.Shutdown(SocketShutdown.Both);sock.Close();4.1.2無(wú)連接的套接字UDP使用無(wú)連接的套接字,無(wú)連接的套接字不需要在網(wǎng)絡(luò)設(shè)備之間發(fā)送連接信息。注意:
必須使用Bind方法將套接字綁定到一個(gè)本地地址和端口之后才能使用ReceiveFrom方法接收數(shù)據(jù),如果只發(fā)送而不接收,則不需要使用Bind方法。。4.1.1面向連接的套接字1.創(chuàng)建本地Socket2.調(diào)用Bind方法綁定到本地端點(diǎn)3.接收數(shù)據(jù)Receive1.創(chuàng)建本地Socket4.發(fā)送數(shù)據(jù)Send4.接收數(shù)據(jù)Receive5.Close()5.Close()機(jī)器1機(jī)器22.調(diào)用Bind方法綁定到本地端點(diǎn)3.發(fā)送數(shù)據(jù)Send4.1.2無(wú)連接的套接字Socket()Bind()ReceiveFrom()SendTo()Close()Socket()Bind()SendTo()ReceiveFrom()Close()設(shè)備1設(shè)備2無(wú)連接套接字編程4.2數(shù)據(jù)流流(stream)是對(duì)串行傳輸?shù)臄?shù)據(jù)(以字節(jié)為單位)的一種抽象表示,底層的設(shè)備可以是文件、外部設(shè)備、主存、網(wǎng)絡(luò)套接字等。4.2數(shù)據(jù)流流提供三種基本操作:
寫入:將數(shù)據(jù)從內(nèi)存緩沖區(qū)傳輸?shù)酵獠吭础?/p>
讀?。簩?shù)據(jù)從外部源傳輸?shù)絻?nèi)存緩沖區(qū)。
查找:重新設(shè)置流的當(dāng)前位置,以便隨機(jī)讀寫。需要注意的是,并不是所有的流類型都能夠支持查找,例如,網(wǎng)絡(luò)流沒(méi)有當(dāng)前位置的統(tǒng)一概念,因此一般不支持查找。
說(shuō)明:Stream類提供有多種操作流的方法,其中Read和Write方法是Stream類及其派生類都提供的實(shí)現(xiàn),可支持在字節(jié)級(jí)別上對(duì)數(shù)據(jù)進(jìn)行讀寫。實(shí)際的程序開發(fā)中,僅支持字節(jié)級(jí)別的數(shù)據(jù)處理會(huì)給開發(fā)人員帶來(lái)不便。4.2數(shù)據(jù)流提供字符串或二進(jìn)制方式讀取或?qū)懭肓?。?yōu)點(diǎn):方法更靈活部分方法可解決TCP消息通信無(wú)邊界問(wèn)題4.2.1FileStream類FileStream類繼承于Stream類,一個(gè)FileStream類的實(shí)例實(shí)際上代表一個(gè)磁盤文件,使用FileStream類可以對(duì)文件系統(tǒng)上的文件進(jìn)行讀取、寫入、打開和關(guān)閉操作。
1、創(chuàng)建FileStream實(shí)例
(1)常用的構(gòu)造函數(shù)具有三個(gè)參數(shù),例如:
FileStream(stringpath, FileModemode, FileAccessaccess)4.2.1FileStream類FileMode值用于指定當(dāng)文件不存在時(shí)是否創(chuàng)建該文件,并確定是保留還是改寫現(xiàn)有文件的內(nèi)容4.2.1FileStream類FileAccess值是枚舉的一個(gè)成員,它控制對(duì)文件的訪問(wèn)權(quán)限。表4-10列出了FileAccess所有的枚舉形式(2)File和FileInfo類也提供了創(chuàng)建FileStream對(duì)象的方法。其中,OpenRead方法返回只讀文件流,OpenWrite方法返回只寫文件流。例如:FileStreamfs=File.OpenRead("C:\\File1.txt");4.2.1FileStream類2.讀文件在獲取FileStream實(shí)例之后,可利用FileStream對(duì)象的Read方法讀取文件中的數(shù)據(jù)。該方法用于從流中讀取字節(jié)塊并將該數(shù)據(jù)寫入給定字節(jié)數(shù)組中。其語(yǔ)法形式為:
publicoverrideint
Read(byte[]array,intoffset,
intcount)array:存儲(chǔ)從文件流中讀取的數(shù)據(jù)。
offset:array字節(jié)數(shù)組中開始寫入數(shù)據(jù)的下標(biāo),一般為0。
size:要從文件流中讀出字節(jié)的大小返回值:從FileStream中讀取的字節(jié)數(shù)?!纠?-2】利用FileStream的Read方法從一個(gè)文本文件中讀取內(nèi)容并顯示在屏幕上。4.2.1FileStream類3.寫文件
Stream類及其所有子類都提供了Write方法,F(xiàn)ileStream類也不例外。該方法可將字節(jié)數(shù)組寫入流。語(yǔ)法形式為
publicoverridevoidWrite( byte[]buffer,//包含要寫入流的數(shù)據(jù)
intoffset,//buffer中開始寫入數(shù)據(jù)的位置
intsize//要寫入流的字節(jié)數(shù)
)【例3-3】利用FileStream的Write方法向文本文件中追加數(shù)據(jù)。4.2.2MemoryStream類MemoryStream類表示的是保存在內(nèi)存中的數(shù)據(jù)流。由內(nèi)存流封裝的數(shù)據(jù)可以在內(nèi)存中直接訪問(wèn)。MemoryStream類的構(gòu)造函數(shù)具有多種重載形式,常用的構(gòu)造函數(shù)有:(1)MemoryStream()
該構(gòu)造函數(shù)初始分配的容量大小為0,隨著數(shù)據(jù)的不斷寫入容量可以不斷擴(kuò)展。(2)MemoryStream(Byte[])
該構(gòu)造函數(shù)獲取的MemoryStream實(shí)例根據(jù)Byte[]字節(jié)數(shù)組進(jìn)行初始化,并且實(shí)例容量大小固定即為字節(jié)數(shù)組的長(zhǎng)度。由于實(shí)例的容量不能擴(kuò)展,該構(gòu)造函數(shù)一般用于數(shù)據(jù)不發(fā)生變化的場(chǎng)合。4.2.2MemoryStream類Stringtestdata="測(cè)試數(shù)據(jù)";char[]chars=testdata.ToCharArray();Byte[]bytes=newByte[encoder.GetByteCount(chars,0,chars.Length,true)];MemoryStreammem=newMemoryStream(bytes);或者:byte[]bytes=Encoding.Unicode.GetBytes("aaasd");MemoryStreammem=newMemoryStream(bytes);(3)MemoryStream(intcapacity)
通過(guò)該構(gòu)造函數(shù)創(chuàng)建初始容量大小為capacity的實(shí)例,并且實(shí)例容量大小可擴(kuò)展?!纠?-4】利用MemoryStream暫存數(shù)據(jù)。4.2.3網(wǎng)絡(luò)流在System.Net.Sockets名稱空間中有一個(gè)NetworkStream類,用于通過(guò)網(wǎng)絡(luò)套接字發(fā)送和接收數(shù)據(jù)。NetworkStream類支持對(duì)網(wǎng)絡(luò)數(shù)據(jù)的同步或異步訪問(wèn),它可被視為在數(shù)據(jù)來(lái)源端和接收端之間架設(shè)了一個(gè)數(shù)據(jù)通道.只用于面向連接的數(shù)據(jù)傳輸寫入操作是指從來(lái)源端內(nèi)存緩沖區(qū)到網(wǎng)絡(luò)上的數(shù)據(jù)傳輸;讀取操作是從網(wǎng)絡(luò)上到接收端內(nèi)存緩沖區(qū)(如字節(jié)數(shù)組)的數(shù)據(jù)傳輸。4.2.3網(wǎng)絡(luò)流(續(xù))4.2.3網(wǎng)絡(luò)流(續(xù))NetworkStream的用法1、構(gòu)造NetworkStream:(1)利用TcpClient獲取網(wǎng)絡(luò)流對(duì)象,例如:
TcpClienttcpClient=newTcpClient(); tcpClient.Connect("",51888); NetworkStreamnetworkStream=client.GetStream();(2)利用Socket獲取網(wǎng)絡(luò)流對(duì)象,例如:
NetworkStreammyNetworkStream=newNetworkStream(mySocket);4.2.3網(wǎng)絡(luò)流(續(xù))2、發(fā)送數(shù)據(jù)
publicoverridevoidWrite(byte[]buffer,intoffset,intsize)4.2.3網(wǎng)絡(luò)流(續(xù))3、接收數(shù)據(jù)publicoverrideintRead( [InAttribute][OutAttribute]byte[]buffer, intoffset, intsize)各參數(shù)的含義:buffer :內(nèi)存中用于存儲(chǔ)從NetworkStream讀取的數(shù)據(jù)的位置。offset:buffer中開始將數(shù)據(jù)存儲(chǔ)到的位置。Size:要從NetworkStream中讀取的字節(jié)數(shù)。返回值:實(shí)際從NetworkStream中讀取的字節(jié)數(shù)。4.2.3網(wǎng)絡(luò)流(續(xù))Write方法:NetworkStream對(duì)象的Write方法的返回值為void,該對(duì)象之所以不返回實(shí)際發(fā)送的字節(jié)數(shù),是因?yàn)槟鼙WC字節(jié)數(shù)組中的數(shù)據(jù)全部發(fā)送到TCP發(fā)送緩沖區(qū)中。在使用NetworkStream對(duì)象的Write方法前最好先檢測(cè)NetworkStream對(duì)象的Writeable屬性是否為True。如果發(fā)送的全部是單行文本信息,創(chuàng)建NetworkStream對(duì)象后,使用StreamReader和StreamWriter的ReadLine和WriteLine方法更簡(jiǎn)單。4.2.3網(wǎng)絡(luò)流(續(xù))Read方法:調(diào)用NetworkStream類的Read方法前應(yīng)確保NetworkStream對(duì)象的CanRead屬性值有效由于有可能TCP接收緩沖區(qū)還沒(méi)有接收到對(duì)方發(fā)送過(guò)來(lái)的指定長(zhǎng)度的數(shù)據(jù),所以Read方法有一個(gè)整型的返回值。如果遠(yuǎn)程主機(jī)關(guān)閉了套接字連接,并且此時(shí)有效數(shù)據(jù)已經(jīng)被完全接收,那么Read方法的返回值將會(huì)是0字節(jié)。4.2.3網(wǎng)絡(luò)流(續(xù))使用NetworkStream對(duì)象時(shí),需要注意:(1)通過(guò)DataAvailable屬性,可以迅速查看在緩沖區(qū)中是否有數(shù)據(jù)等待讀出。(2)網(wǎng)絡(luò)流沒(méi)有當(dāng)前位置的概念,因此它不支持對(duì)數(shù)據(jù)流的查找和隨機(jī)訪問(wèn),NetworkStream對(duì)象的CanSeek屬性始終返回false,讀取Position屬性和調(diào)用Seek方法時(shí),都會(huì)引發(fā)NotSupportedException異常。(3)網(wǎng)絡(luò)數(shù)據(jù)傳輸完成后,不要忘記用Close方法關(guān)閉NetworkStream對(duì)象。4.2.4StreamWriter與StreamReader類可以看到所有的NetworkStream、MemoryStream、FileStream類都提供了以字節(jié)為基本單位的讀寫方法,但是這種方法需要首先將待寫入的數(shù)據(jù)轉(zhuǎn)化為字節(jié)數(shù)組后才能夠進(jìn)行讀寫,當(dāng)操作的是使用字符編碼的文本數(shù)據(jù)時(shí),給開發(fā)人員帶來(lái)了不便。StreamReader類主要完成以一種特定的編碼從流中讀取字符的功能,一般用于對(duì)文本數(shù)據(jù)的讀取操作;StreamWriter類則主要以特定的編碼向流中寫入字符,一般用于對(duì)文本數(shù)據(jù)的寫操作。4.2.4StreamWriter與StreamReader類1、創(chuàng)建StreamWriter實(shí)例(1)StreamWriter(Stringpath)
根據(jù)文件路徑創(chuàng)建以UTF-8編碼StreamWriter對(duì)象。例如:
StreamWritersw=newStreamWriter("C:\\file1.txt");(2)File及FileInfo類提供的CreateText方法。例如:
StreamWritersw=File.CreateText("C:\\file1.txt");4.2.4StreamWriter與StreamReader類1、創(chuàng)建StreamWriter實(shí)例(續(xù))(3)StreamWriter(Streamstream)
直接使用流對(duì)象創(chuàng)建StreamWriter對(duì)象。例如:
FileStreamfs=newFileStream(filePath,FileMode.Open,FileAccess.ReadWrite);StreamWritersw=newStreamWriter(fs);
如果已經(jīng)有了網(wǎng)絡(luò)流對(duì)象,同樣可以直接對(duì)網(wǎng)絡(luò)流對(duì)象進(jìn)行封裝。
NetworkStreamnetworkStream=client.GetStream();StreamWritersw=newStreamWriter(networkStream);4.2.4StreamWriter與StreamReader類2、寫入文本利用StreamWriter類將以一種特定的編碼向流中寫入字符。常見方法如下所示:
Write():向數(shù)據(jù)流寫入數(shù)據(jù)。Write()方法只是把傳送給它的字符串寫入流,但不追加換行符,因此可以使用Write()語(yǔ)句寫入完整的句子或段落。
WriteLine():向數(shù)據(jù)流寫入指定數(shù)據(jù)和一個(gè)換行符。
Clos
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024跨境電商服務(wù)平臺(tái)居間合同
- 二零二四年中英文教育培訓(xùn)機(jī)構(gòu)合作服務(wù)合同3篇
- 2025年度物流倉(cāng)儲(chǔ)場(chǎng)地租賃及供應(yīng)鏈管理合同6篇
- 2025年度航空航天產(chǎn)業(yè)技術(shù)工人勞動(dòng)合同3篇
- 2025年度網(wǎng)絡(luò)安全監(jiān)測(cè)預(yù)警服務(wù)合同6篇
- 2025年度大型企業(yè)員工培訓(xùn)服務(wù)采購(gòu)合同范本3篇
- 二零二四年A公司網(wǎng)站開發(fā)合同協(xié)議書
- 二零二五年度大廈商場(chǎng)租賃合同(含節(jié)假日營(yíng)業(yè)規(guī)定)3篇
- 2025年度餐廚廢棄物處置與廢棄物處理設(shè)施運(yùn)營(yíng)管理合同3篇
- 2025版煤礦安全生產(chǎn)責(zé)任險(xiǎn)投保合同3篇
- 春節(jié)文化常識(shí)單選題100道及答案
- 12123交管學(xué)法減分考試題及答案
- 2024年杭州師范大學(xué)附屬醫(yī)院招聘高層次緊缺專業(yè)人才筆試真題
- 制造業(yè)BCM業(yè)務(wù)連續(xù)性管理培訓(xùn)
- 商場(chǎng)停車場(chǎng)管理制度
- 24年追覓在線測(cè)評(píng)28題及答案
- TGDNAS 043-2024 成人靜脈中等長(zhǎng)度導(dǎo)管置管技術(shù)
- 《陸上風(fēng)電場(chǎng)工程概算定額》NBT 31010-2019
- 皮帶輸送機(jī)工程施工電氣安裝措施要點(diǎn)
- 藥房(冰柜)溫濕度表
- QJ903.9A-1995航天產(chǎn)品工藝文件管理制度管理用工藝文件編制規(guī)則
評(píng)論
0/150
提交評(píng)論