版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ActionScript3.0 Socket編程與Socket服務(wù)器建立連接解決方法:通過調(diào)用Socket.connect( )或者XMLSocket.connect( )方法并網(wǎng)絡(luò)連接的事件消息.:連接一臺(tái) Socket 服務(wù)器你需要確定兩個(gè)信息,一個(gè)是 Socket 服務(wù)器的或者 IP 地址,另一個(gè)是服務(wù)器的端.無論你使用的是 Socket 還是 XMLSocket 類的實(shí)例,連接請(qǐng)求都是完全的一樣的,兩個(gè)類都是使用一個(gè)名叫 connect()的方法,該方法有兩個(gè)參數(shù):host :該參數(shù)為字符串類型,可以是一個(gè),例如,也可以是一個(gè) IP 地址,例如01.如果 Socket 服務(wù)器與你該 F
2、lash 影片發(fā)布的 Web 服務(wù)器是同一個(gè),該參數(shù)為Null. port :該參數(shù)為一個(gè)表示 Socket 服務(wù)器一個(gè) policy 文件,用于指定允許端因?yàn)?Flash端口的值.該值最小為 1024.除非在服務(wù)器中有小于 1024.Socket 編程是一個(gè)異步的過程,connect()方法不會(huì)等到接完成后再執(zhí)行下一行代碼的執(zhí)行.如果你想在接完全執(zhí)行完之前與一個(gè)Socket 完全綁定,那么你將會(huì)得到一個(gè)意想不到的結(jié)果,并且你當(dāng)前的代碼將不能工作.在嘗試一個(gè)新的 Socket 連接的時(shí)候功,Socket 或者 XMLSocket 會(huì)發(fā)出最好先添加接事件器.當(dāng)接建立成接事件,這就可以讓你知道交互
3、已經(jīng)準(zhǔn)備好了.下面舉了一個(gè) Socket 實(shí)例與本地 Socket 服務(wù)器的 2900 端口建立連接的例子:package import flash.display.Sprite; import flash.events.*; import .Socket;public class SocketExle extends Sprite private var socket:Socket;public function SocketExsocket = new Socket();le() / Add an event listener to be notified when the connect
4、ion/ is madesocket.addEventListener( Event.CONNECT, onConnect );/ Connect to the serversocket.connect( localhost, 2900 );private function onConnect( event:Event ):void trace( The socket is now connected. );如果你想通過XMLSocket 與服務(wù)器建立連接代碼也是基本一樣的.首先你創(chuàng)建了件器,然后調(diào)用 connect()方法.所不同的是 Socket 實(shí)例改為了XMLSocket:接事pack
5、age import flash.display.Sprite; import flash.events.*;import .XMLSocket;public class SocketExle extends Sprite private var socket:XMLSocket;public function SocketExle() socket = new XMLSocket();/ Add an event listener to be notified when the connection is madesocket.addEventListener( Event.CONNECT,
6、 onConnect );/ Connect to the serversocket.connect( localhost, 2900 );private function onConnect( event:Event ):void trace( The xml socket is now connected. );如果連接失敗,可那是下面兩種原因的一種:一種是連接立即失敗和運(yùn)行時(shí)錯(cuò)誤,另一種是如果無法完成連接從而產(chǎn)生一個(gè) ioError 或者securityError 事件.關(guān)于錯(cuò)誤事件處理信息的描述,打算改日.請(qǐng)牢記,當(dāng)與一個(gè)主機(jī)建立一個(gè) Socket 連接時(shí),Flash Player 要
7、遵守如下安全沙箱規(guī)則.1.Flash 的.swf 文件和主機(jī)必須嚴(yán)格的在同一個(gè),才可以成功建立連接.一個(gè)從網(wǎng)上發(fā)布的.swf 文件是不可以本地未通過認(rèn)證的.swf 文件是不可以本地服務(wù)器的.任何網(wǎng)絡(luò)資源的.4.你想跨域或者連接低于 1024 的端口,必須使用一個(gè)跨域策略文件.如果嘗試連接未認(rèn)證的域或者口服務(wù),這樣就了安全沙箱策略,同時(shí)會(huì)產(chǎn)生一個(gè)securityError 事件.這些情況都可以通過使用一個(gè)跨域策略文件解決.無論是 Socket 對(duì)象還是XMLSocket 對(duì)象的策略文件,都必須在連接之前通過使用flash.system.Security.lo方法載入策略文件.具體如下:olicy
8、File()Security.loolicyFile(/cross,還定義了端.xml);.如果你不設(shè)置端獲得的改策略文件不僅定義了允許的Flash,那么Player 默認(rèn)為 80 端口(HTTP 協(xié)議默認(rèn)端口).在中可以使用逗號(hào)隔開設(shè)置多個(gè)端.下面這個(gè)例子就是允許80 和 110 端口.-policy.dtdcross-從Socket服務(wù)器讀數(shù)據(jù)解決方法:對(duì)于 Socket 實(shí)例,先收到 socketData 事件,然后調(diào)用如下兩個(gè)方法的一個(gè),比如,readByte() 或者 read bytesAvailable.(), 在事件控制器中確定不會(huì)去讀過去的對(duì)于 XMLSocket 實(shí)例,先收
9、到 data 事件,然后從事件控制器 XML 數(shù)據(jù).裝載的:從一個(gè) socket 連接接收的數(shù)據(jù)依賴于你使用的 Socket 的類型.socket 和 XMLSocket 都可以從服務(wù)器接受到數(shù)據(jù),但是它們處于不同重量級(jí)的技術(shù).讓我們?cè)赬MLSocket 之前先關(guān)注下 Socket 類.我都知道 socket 在 Flash 中是一個(gè)異步的行為.因此,它就不能簡(jiǎn)單的創(chuàng)建一個(gè)Socket 連接,然后就立刻嘗試去數(shù)據(jù).read 方法不能等到從服務(wù)器傳過來數(shù)據(jù)之后在返回.換句話說,你只能在客戶端從服務(wù)器載入所有數(shù)據(jù)之后才可以數(shù)據(jù).在數(shù)據(jù)可用之前讀數(shù)據(jù)會(huì)產(chǎn)生一個(gè)錯(cuò)誤.通過 socketData 事件廣
10、播到 Socket 實(shí)例,這樣就可以知道什么時(shí)候數(shù)據(jù)可以被.那么要為 socketData 事件添加一個(gè)事件器,任何時(shí)候只要有新的數(shù)據(jù)從一個(gè) socket 服務(wù)器發(fā)送過來,都會(huì)觸發(fā)事件控制器.在事件處理器的寫入要執(zhí)行的代碼去和處理收到的數(shù)據(jù).從一個(gè)前端服務(wù)器數(shù)據(jù),Socket 類為提供了許多不同的方法,這些方法依賴于你所讀得數(shù)據(jù)類型.例如,你可以通過readByte()方法讀一個(gè)byte 數(shù)據(jù),或者通過一個(gè)使用 readUnsigned()方法去讀一個(gè)無符號(hào)整數(shù).下面這個(gè)表列出來能夠從服務(wù)器的數(shù)據(jù)類型,返回值,和 read 方法每次讀入的字節(jié)數(shù).Table:Socketreadmethodsf
11、orvariousdaypes有兩個(gè)額外的方法沒有在上面這個(gè)表中描述.它們分別是readBytes()和readUTFBytes().readBytes()方法只可以讓 socket 讀數(shù)據(jù)但不能返回一個(gè)值,并且該方法需要 3 個(gè)參數(shù):bytes:一個(gè) flash.util.ByteArray 實(shí)例從 socket 中收到的數(shù)據(jù).方法:返回值類型描述字節(jié)數(shù)read( ):從 Socket一個(gè)值.1readByte( ):從 Socket一個(gè) byte 值.1readDouble( ):Number從 Socket一個(gè) IEEE 754 雙精度浮點(diǎn)數(shù).8readFloat( ):Number從
12、Socket一個(gè) IEEE 754 單精度浮點(diǎn)數(shù).4read( ):從 Socket一個(gè)有符號(hào) 32-bit 整數(shù)值.4readObject( ):*從Socket一個(gè)AMF-encoded對(duì)象.nreadShort( ):從 Socket一個(gè)有符號(hào) 16-bit 整數(shù)值.2readUnsignedByte( ):u從 Socket一個(gè)無符號(hào)字節(jié).1readUnsigned( ):u從 Socket一個(gè)無符號(hào) 32-bit 整數(shù)4readUnsignedShort( ):u從 Socket一個(gè)無符號(hào) 16-bit 整數(shù).2readUTF( ):String從 Socket一個(gè)一個(gè) UTF8 字
13、符串.noffset:一個(gè)u為 0. length:一個(gè)u值,指定從什么位置開始socket 中收到數(shù)據(jù)的偏移量.默認(rèn)值值,用于指定bytes 的數(shù)量.默認(rèn)值為 0,意思就是說將所有的可用的數(shù)據(jù)都放入 ByteArray 中.另一個(gè) readUTFBytes()方法,只需要一個(gè)長(zhǎng)度參數(shù)用于指定 UTF-8 字節(jié)的讀入數(shù)量,并且該方將所有讀入的字節(jié)碼轉(zhuǎn)換成為字符串類型.注意:在從一個(gè) Socket 讀數(shù)據(jù)之前,首先要判斷 bytesAvailable 的屬性.如果你不知道要讀入的數(shù)據(jù)類型是什么就去讀數(shù)據(jù)的話,將會(huì)產(chǎn)生一個(gè)錯(cuò)誤 (flash.errors.EOFError).下面的例子代碼連接了一
14、個(gè) socket 服務(wù)器,并顯示每次從服務(wù)器發(fā)來的數(shù)據(jù).package import import importflash.display.Sprite; flash.events.ProgressEvent; .Socket;publicclass SocketExle extends Sprite private var socket:Socket;public function SocketEx socket = new Socket();le() / Listen for when data is received from the socket serversocket.addEve
15、ntListener( onSocketData );ProgressEvent.SOCKET_DATA,/ Connect to the server socket.connect( localhost, 2900 );private function onSocketData( event:ProgressEvent ):void trace( Socket received + socket.bytesAvailable + byte(s) ofdata: );/ Loop over all of the received data, and only read a byte if th
16、ere/ is one availablewhile ( socket.bytesAvailable ) / Read a byte from the socket and display it var data:= socket.readByte();trace( data );在上面的這個(gè)例子中, 如果一個(gè) socket 服務(wù)器發(fā)送回一個(gè)消息( 例如 o),當(dāng)一個(gè)客戶段連入服務(wù)器就會(huì)返回并輸出下面類似的文字:Socket received 5 byte(s) of data: 72101108108111注意:一旦數(shù)據(jù)從 socket 讀出,它就不能再次被讀.例如,讀一個(gè)字節(jié)之后,這個(gè)字節(jié)
17、就不能再放回來,只能讀后邊的字節(jié).當(dāng)收到的數(shù)據(jù)為ASCII 編碼,你可以通過readUTFBytes()方法重新構(gòu)建一個(gè)字符串.readUTFBytes()方法需要知道多少個(gè)字節(jié)需要轉(zhuǎn)換為字符串.你可以使用 bytesAvailable 去讀所有的字節(jié)數(shù)據(jù):var string:String = socket.readUTFBytes(socket.bytesAvailable);XMLSocket 類的動(dòng)作和Socket 類相比在從服務(wù)器接受數(shù)據(jù)的風(fēng)格相似.兩者都是通過事件器來數(shù)據(jù)接收通知的,這主要取決于 Flash 異步的 Socket實(shí)現(xiàn).然而,在處理實(shí)際數(shù)據(jù)的時(shí)候有很大的不同.有個(gè) X
18、MLSocket 實(shí)例在從服務(wù)器完數(shù)據(jù)后分發(fā)數(shù)據(jù)事件.通過flash.events.DataEvent.DATA 常量定義的數(shù)據(jù)事件包含一個(gè)data 屬性,該屬性包含了從服務(wù)器收到的信息.注意:使用 XMLSocket 從服務(wù)器返回的數(shù)據(jù)總是認(rèn)為是一個(gè)字符串類型的數(shù)據(jù).這樣不用為任何數(shù)據(jù)類型的數(shù)據(jù)指定方法.這些從服務(wù)器返回的數(shù)據(jù)是沒有經(jīng)過任何處理的原始數(shù)據(jù).因此,你不能通過XMLSocket 連接立即使用XML,你發(fā)送和接收的都是純字符串?dāng)?shù)據(jù).如果你期望 XML,在你處理數(shù)據(jù)之前,你必須首先將這些數(shù)據(jù)轉(zhuǎn)換為一個(gè) XML 的實(shí)例.下面的這段代碼在初始化的時(shí)候通過 XMLSocket 連接到了本地
19、服務(wù)器的 2900 端口.在連接成功之后,一個(gè)消息會(huì)發(fā)送到服務(wù)器.onData 事件者控制從服務(wù)器返回的響應(yīng).在本例中返回字符串 .你可以通過事件的 data 屬性發(fā)現(xiàn)為字符串?dāng)?shù)據(jù),然后XML 類的構(gòu)造函數(shù)將字符串轉(zhuǎn)換成為了XML 實(shí)例.最后,通過使用E4X 語法的XML 實(shí)例的一部分信息.(關(guān)于通過使用 E4X 處理 XML 的另外.)詳細(xì)信息,需要package import import import importflash.display.Sprite; flash.events.Event; flash.events.DataEvent; .XMLSocket;publicclass
20、 SocketExle extends Sprite private var xmlSocket:XMLSocket;public function SocketExle() xmlSocket = new XMLSocket();/ Connect listener to send a message to theserver/ after we make a sucsful connectionxmlSocket.addEventListener( Event.CONNECT, onConnect );/ Listen for when data is received from the
21、socket serverxmlSocket.addEventListener( DataEvent.DATA, onData);/ Connect to the server xmlSocket.connect( localhost, 2900 );private function onConnect( event:Event ):void xmlSocked( );private function onData( event:DataEvent ):void /The raw string returned from the server. It might look something
22、like this:trace( event.data );/ Convert the stringo XMLXML( event.data );var response:XML=new/ Using E4X, ac/ element nodes the sucs attribute of the testhe response./ Output: truetrace( response.test.sucs );注意:在 data 事件分發(fā)數(shù)據(jù)之前,XMLSocket 實(shí)例必須從服務(wù)器收到一個(gè)表示為空的 byte(0).也就是說,從服務(wù)器僅僅只發(fā)送所需要的字符串是不夠的,必須在結(jié)尾處加入一個(gè)表
23、示為空的 byte.同Socket服務(wù)器進(jìn)行握手,并確定收到了什么樣的數(shù)據(jù)和如何處理這些數(shù)據(jù)解決方法:創(chuàng)建不同的常量來協(xié)議的狀態(tài).使用這些常量將指定的處理函數(shù)到相應(yīng)的狀態(tài).在一個(gè) socketData 事件控制器中,通過狀態(tài)調(diào)用這些函數(shù)的.:建立 Socket 連接通常要處理握手這個(gè)環(huán)節(jié).尤其是在服務(wù)器初始化需要向客戶端發(fā)送數(shù)據(jù).然后客戶端通過一種特殊的方式相應(yīng)這些數(shù)據(jù),接著服務(wù)器因此再次響應(yīng).整個(gè)處理過程直到握手完成并且建立起一個(gè)正常的連接為止.處理服務(wù)器的不同響應(yīng)是非難的,主要的原因是 socketData 事件控制器不能保存上下文的順序.也就是說,服務(wù)器的響應(yīng)不會(huì)告訴你為什么響應(yīng),也不告
24、訴你這些響應(yīng)數(shù)據(jù)被那個(gè)處理程序來處理.要想知道如何處理這些從服務(wù)器返回的響應(yīng)不能從響應(yīng)的本身來獲得,尤其在響應(yīng)變化的時(shí)候.或許一個(gè)響應(yīng)返回了兩個(gè)字節(jié)碼,另一個(gè)返回了一個(gè)整數(shù)值還跟了一個(gè)雙精度浮點(diǎn)數(shù).這樣看來讓響應(yīng)本身處理自己是一題.通過創(chuàng)建一個(gè)狀態(tài)量來標(biāo)注不同的上下文,服務(wù)器通過這些上下文將數(shù)據(jù)發(fā)送到客戶端.與這些狀態(tài)量都有一個(gè)相關(guān)聯(lián)的函數(shù)來處理該數(shù)據(jù),這樣你就可以很輕松的按照當(dāng)前的協(xié)議狀態(tài)去調(diào)用正確的處理函數(shù).當(dāng)你要與一個(gè) Socket 服務(wù)器建立連接需要考慮如下幾個(gè)步驟: 1.當(dāng)與服務(wù)器連接的時(shí)候,服務(wù)器立刻返回一個(gè)標(biāo)志服務(wù)器可以支持的最高協(xié)議版本號(hào)的整數(shù)值.2.客戶端在響應(yīng)的時(shí)候會(huì)返回一
25、個(gè)實(shí)際使用協(xié)議的版本號(hào).3.服務(wù)器返回一個(gè) 8byte 的鑒定碼.4.然后客戶端將這鑒定碼返回到服務(wù)器.5.如果客戶端的響應(yīng)不是服務(wù)器端所期望的,或者,就在這個(gè)時(shí)候該協(xié)議變成了一個(gè)常規(guī)操作模式,于是握手結(jié)束.實(shí)際上在第四步可以在鑒定碼中包含的安全響應(yīng).你可以通過發(fā)送各種加密方法的密匙來代替逐個(gè)發(fā)送的鑒定碼.這通常使用在客戶端向用戶索要的時(shí)候,然后成為了加密過的 8byte 鑒定碼.該加密過的鑒定碼接著返回到服務(wù)器.如果響應(yīng)的鑒定碼匙服務(wù)器所期望的,客戶端就知道該后同意建立連接.是正確的,然實(shí)現(xiàn)握手框架,你首先要為處理從服務(wù)器返回的不同類型的數(shù)據(jù)分別創(chuàng)建常量.首先,你要從步驟 1 確定版本號(hào).然
26、后從步驟 3 收取鑒定碼.最后就是步驟 5的常規(guī)操作模式.可以如下常量:public public publicconst const constDETERMINE_VER:= 0;= 1;RECEIVE_CHALLENGE:NORMAL:= 2;常量的值并不重要,重要的是這些值要是不同的值,兩兩之間不能有相同的整數(shù)值.下一個(gè)步驟就要為不同的數(shù)據(jù)創(chuàng)建不同處理函數(shù)了.創(chuàng)建的這三個(gè)函數(shù)分別被命名為 readVer創(chuàng)建完這三個(gè)函數(shù)后,( ), readChallenge( ) 和 readNormalProtocol( ).就必須將這三個(gè)函數(shù)分別到前面不同狀態(tài)常量,從而分別處理在該狀態(tài)中收到的數(shù)據(jù).
27、代碼如下:s s s seMap = new Object();eMap eMap eMapDETERMINE_VER RECEIVE_CHALLENGE NORMAL=readVer;readChallenge; readNormalProtocol;最后一步是編寫 socketData 事件處理控制器,只有通過這樣的方式,建立在當(dāng)前協(xié)議狀態(tài)之上的正確的處理函數(shù)才可以被調(diào)用.首先需要?jiǎng)?chuàng)建一個(gè)currentSe 的變量.然后使用seMap 去查詢與currentSe 相關(guān)聯(lián)的函數(shù),這樣處理函數(shù)就可以被正確調(diào)用了.var prosFunc:Function = seMap currentSe ;
28、prosFunc(); / Invoke the appropriate prosing function下面是一點(diǎn)與薄記相關(guān)的處理程序.在你的代碼中更新 currentS保當(dāng)前協(xié)議的狀態(tài).e 從而確前面所探討的握手步驟的完整的代碼如下: package import import import importflash.display.Sprite; flash.events.ProgressEvent; .Socket; flash.utils.ByteArray;public class SocketExle extends Sprite / The public public publi
29、cseconstants to describethe protocol= 0;= 1;const const constDETERMINE_VER:RECEIVE_CHALLENGE: NORMAL:= 2;/ Maps a se to a prosingfunctionprivate var seMap:Object;/ Keeps track of the current protocol seprivate var currentSe:;private var socket:Socket;public function SocketExle( map)/ s s s sInitialz
30、es the seseMap = new Object();eMap eMap eMapDETERMINE_VER RECEIVE_CHALLENGE NORMAL=readVer;readChallenge; readNormalProtocol;/Initialze the current securrentSe = DETERMINE_VER;/ Create and connect the socket socket = new Socket();socket.addEventListener( onSocketData );socket.connect( localhost, 290
31、0 );ProgressEvent.SOCKET_DATA,private function onSocketData( event:ProgressEvent ):void / Look up the prosing function based on the current sevar prosFunc:Function= seMap currentSe ;prosFunc();private function readVer():void from the server ();/ Step var ver1 - read the ver:= socket.read/ Oncethe ve
32、ris read, the next se is receiving/ the challenge from the servercurrentSe = RECEIVE_CHALLENGE;/ Step 2- write the verback tothe serversocket.write socket.flush( ver););private functionreadChallenge():void/ Step 3 - read the 8 byte challenge var bytes:ByteArray = new ByteArray( socket.readBytes( byt
33、es, 0, 8 );o a byte array);/ After the challenge is received,/ the normal protocol operationthe next se iscurrentSe = NORMAL;/ Step 4- write the bytes back tothe serversocket.writeBytes( bytes ); socket.flush();private function readNormalProtocol():void / Step 5 - pros the normal socket messages her
34、e nowt/ndshaking pros is complete與Socket服務(wù)器斷開,或者當(dāng)服務(wù)器想與你斷開的時(shí)候發(fā)消息給你解決方法:通過調(diào)用 Socket.close( )或者 XMLSocket.close( )方法顯性的斷開與服務(wù)器的連接.同時(shí)可以通過close 事件獲得服務(wù)器主動(dòng)斷開的消息.:通常情況下需要對(duì)程序進(jìn)行下工作.比如說,你創(chuàng)建了一個(gè)對(duì)象,當(dāng)這個(gè)對(duì)象沒有用的時(shí)候 Socket 服務(wù)器,都要在就要?jiǎng)h除它.因此,無論什么時(shí)候連接一個(gè)完成了必要的任務(wù)之后顯性的斷開連接. 一直留著無用的 Socket 連接浪費(fèi)網(wǎng)絡(luò)資源,應(yīng)該盡量避免這種情況.如果你沒有斷開一個(gè)連接,那么這個(gè)服務(wù)
35、器會(huì)繼續(xù)保持著這個(gè)無用的連接.這樣一來就很快會(huì)超過了服務(wù)器最大 Socket 連接上線.Socket 和 XMLSocket 對(duì)象斷開連接的方法是一樣的.你只需要調(diào)用 close()方法就可以了:/ Ame socket is a connected Socket instancesocket.close();/ Disconnect from the server同樣的,XMLSocket 對(duì)象斷開連接的方法一樣:/ Ame xmlSocket is a connected XMLSocket instancexmlSocket.close();/ Disconnect from the s
36、erverclose()方法用于通知服務(wù)器客戶端想要斷開連接.當(dāng)服務(wù)器主動(dòng)斷開連接會(huì)發(fā)消息通知客戶端.可以通過調(diào)用addEventListener()方法一個(gè)close 事件的一個(gè)器.Socket 和XMLSocket 都是使用 Event.CLOSE 作為連接斷開事件類型的;例如:/ Add an event listenerto be notified when the server disconnects/ the cntsocket.addEventListener(Event.CLOSE, onClose );注意:調(diào)用 close()方法是不會(huì)觸發(fā) close 事件的,只用服務(wù)器主動(dòng)發(fā)起斷
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度水利工程項(xiàng)目投標(biāo)擔(dān)保委托保證合同3篇
- 二零二五版葫蘆島市房屋繼承合同范本3篇
- 基于二零二五年業(yè)績(jī)目標(biāo)的小型餐飲店面館飯店加盟合同3篇
- 二零二五年湖南機(jī)關(guān)事業(yè)單位合同制工人醫(yī)療保險(xiǎn)聘用合同3篇
- 二零二五版電梯門套工程安全風(fēng)險(xiǎn)評(píng)估與應(yīng)急預(yù)案合同3篇
- 二零二五年電子商務(wù)糾紛解決機(jī)制合同2篇
- 二零二五年度辣椒種植與農(nóng)業(yè)科技創(chuàng)新合作合同3篇
- 二零二五年度物流配送中心場(chǎng)地租賃合同BF06023篇
- 二零二五年度服裝調(diào)換貨及退貨處理合同范本3篇
- 二零二五年度酒店住宿代理服務(wù)合同示范文本2篇
- 新版DFMEA基礎(chǔ)知識(shí)解析與運(yùn)用-培訓(xùn)教材
- 制氮機(jī)操作安全規(guī)程
- 衡水市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(kù)(全真題庫(kù))
- 護(hù)理安全用氧培訓(xùn)課件
- 《三國(guó)演義》中人物性格探析研究性課題報(bào)告
- 注冊(cè)電氣工程師公共基礎(chǔ)高數(shù)輔導(dǎo)課件
- 土方勞務(wù)分包合同中鐵十一局
- 乳腺導(dǎo)管原位癌
- 冷庫(kù)管道應(yīng)急預(yù)案
- 司法考試必背大全(涵蓋所有法律考點(diǎn))
- 公共部分裝修工程 施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論