Java網(wǎng)絡(luò)編程復(fù)習(xí)要點(diǎn)及實(shí)驗(yàn)_第1頁(yè)
Java網(wǎng)絡(luò)編程復(fù)習(xí)要點(diǎn)及實(shí)驗(yàn)_第2頁(yè)
Java網(wǎng)絡(luò)編程復(fù)習(xí)要點(diǎn)及實(shí)驗(yàn)_第3頁(yè)
Java網(wǎng)絡(luò)編程復(fù)習(xí)要點(diǎn)及實(shí)驗(yàn)_第4頁(yè)
Java網(wǎng)絡(luò)編程復(fù)習(xí)要點(diǎn)及實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1.對(duì)非可序列化對(duì)象調(diào)用序列化和反序列化方法會(huì)拋出IOExceptiontransient變量不會(huì)被序列化Static變量不會(huì)被初始化Externalizable接口中聲明了兩個(gè)方法:publicvoidwriteExternal(ObjectOutputout)throwsIOExceptionpublicvoidreadExternal(ObjectInputin)throwsIOException,ClassNotFoundExceptionwriteExternal()方法負(fù)責(zé)序列化操作readExternal()方法負(fù)責(zé)反序列化操作區(qū)別于默認(rèn)反序列化方式:在對(duì)實(shí)現(xiàn)了Externalizable接口的類的對(duì)象進(jìn)行反序列化時(shí),會(huì)先調(diào)用類的默認(rèn)(不帶參數(shù)的)構(gòu)造方法。由此可見(jiàn),如果類實(shí)現(xiàn)了Externalizable接口,那么它必須具有public類型的不帶參數(shù)的構(gòu)造方法,否則這個(gè)類無(wú)法反序列化。2.判斷兩個(gè)Class實(shí)例是否相等可以使用==if(e.getClass()==Employee.class){…}獲得Class對(duì)象表示類的完整類名getName()Java反射機(jī)制主要提供了以下功能:在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類。在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象。在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法。在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法。生成動(dòng)態(tài)代理。Java中的Object類是所有Java類的公共父類,是所有類繼承的根,其內(nèi)定義了應(yīng)該在所有Java類中被改寫(xiě)的幾個(gè)方法:hashCode()equals()clone()toString()getClass()在JDK中,主要由java.lang.reflect包中的類來(lái)實(shí)現(xiàn)Java反射機(jī)制:Class類:代表一個(gè)類型Field類:代表類的成員變量(成員變量也稱為類的屬性)Method類:代表類的方法Constructor類:代表類的構(gòu)造方法Modifier類:Java中的各種修飾符Array類:提供了動(dòng)態(tài)創(chuàng)建數(shù)組,以及訪問(wèn)數(shù)組的元素的靜態(tài)方法遠(yuǎn)程調(diào)用:創(chuàng)建一個(gè)Call類作為傳輸類,其中封裝了要調(diào)用的方法名稱,參數(shù)類型、參數(shù)值以及方法執(zhí)行的結(jié)果創(chuàng)建一個(gè)接口,作為通信雙方事先約定的可以調(diào)用的方法在服務(wù)器端提供一個(gè)通信接口的實(shí)現(xiàn)類創(chuàng)建服務(wù)器程序創(chuàng)建客戶端程序Call對(duì)象表示客戶端發(fā)起的一個(gè)遠(yuǎn)程調(diào)用,它包括方法調(diào)用的類名或接口名、方法名、方法參數(shù)類型、方法參數(shù)值和方法執(zhí)行結(jié)果。publicclassCallimplementsSerializable{privateStringclassName;//表示類名或接口名privateStringmethodName;//表示方法名privateClass[]paramTypes;//表示方法參數(shù)類型privateObject[]params;//表示方法參數(shù)值privateObjectresult;}TCP三次握手/四次揮手詳解(轉(zhuǎn))2009-11-2611:23TCP(TransmissionControlProtocol)傳輸控制協(xié)議TCP是主機(jī)對(duì)主機(jī)層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個(gè)連接:位碼即tcp標(biāo)志位,有6種標(biāo)示:SYN(synchronous建立聯(lián)機(jī))ACK(acknowledgement確認(rèn))PSH(push傳送)FIN(finish結(jié)束)RST(reset重置)URG(urgent緊急)Sequencenumber(順序號(hào)碼)Acknowledgenumber(確認(rèn)號(hào)碼)第一次握手:主機(jī)A發(fā)送位碼為syn=1,隨機(jī)產(chǎn)生seqnumber=1234567的數(shù)據(jù)包到服務(wù)器,主機(jī)B由SYN=1知道,A要求建立聯(lián)機(jī);第二次握手:主機(jī)B收到請(qǐng)求后要確認(rèn)聯(lián)機(jī)信息,向A發(fā)送acknumber=(主機(jī)A的seq+1),syn=1,ack=1,隨機(jī)產(chǎn)生seq=7654321的包第三次握手:主機(jī)A收到后檢查acknumber是否正確,即第一次發(fā)送的seqnumber+1,以及位碼ack是否為1,若正確,主機(jī)A會(huì)再發(fā)送acknumber=(主機(jī)B的seq+1),ack=1,主機(jī)B收到后確認(rèn)seq值與ack=1則連接建立成功。完成三次握手,主機(jī)A與主機(jī)B開(kāi)始傳送數(shù)據(jù)。

在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。

第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);

第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。完成三次握手,客戶端與服務(wù)器開(kāi)始傳送數(shù)據(jù).實(shí)例:IP16.3337>23.7788:S3626544836:3626544836

IP23.7788>16.3337:S1739326486:1739326486ack3626544837

IP16.3337>23.7788:ack1739326487,ack1第一次握手:16發(fā)送位碼syn=1,隨機(jī)產(chǎn)生seqnumber=3626544836的數(shù)據(jù)包到23,23由SYN=1知道16要求建立聯(lián)機(jī);第二次握手:23收到請(qǐng)求后要確認(rèn)聯(lián)機(jī)信息,向16發(fā)送acknumber=3626544837,syn=1,ack=1,隨機(jī)產(chǎn)生seq=1739326486的包;第三次握手:16收到后檢查acknumber是否正確,即第一次發(fā)送的seqnumber+1,以及位碼ack是否為1,若正確,16會(huì)再發(fā)送acknumber=1739326487,ack=1,23收到后確認(rèn)seq=seq+1,ack=1則連接建立成功。圖解:

一個(gè)三次握手的過(guò)程(圖1,圖2)

(圖1)

(圖2)

第一次握手的標(biāo)志位(圖3)

我們可以看到標(biāo)志位里面只有個(gè)同步位,也就是在做請(qǐng)求(SYN)

(圖3)

第二次握手的標(biāo)志位(圖4)

我們可以看到標(biāo)志位里面有個(gè)確認(rèn)位和同步位,也就是在做應(yīng)答(SYN+ACK)

(圖4)

第三次握手的標(biāo)志位(圖5)

我們可以看到標(biāo)志位里面只有個(gè)確認(rèn)位,也就是再做再次確認(rèn)(ACK)

(圖5)

一個(gè)完整的三次握手也就是請(qǐng)求---應(yīng)答---再次確認(rèn)四次分手:由于TCP連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這個(gè)原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來(lái)終止這個(gè)方向的連接。收到一個(gè)FIN只意味著這一方向上沒(méi)有數(shù)據(jù)流動(dòng),一個(gè)TCP連接在收到一個(gè)FIN后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。(1)客戶端A發(fā)送一個(gè)FIN,用來(lái)關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送(報(bào)文段4)。(2)服務(wù)器B收到這個(gè)FIN,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1(報(bào)文段5)。和SYN一樣,一個(gè)FIN將占用一個(gè)序號(hào)。(3)服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個(gè)FIN給客戶端A(報(bào)文段6)。(4)客戶端A發(fā)回ACK報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1(報(bào)文段7)。

1.為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢?這是因?yàn)榉?wù)端的LISTEN狀態(tài)下的SOCKET當(dāng)收到SYN報(bào)文的建連請(qǐng)求后,它可以把ACK和SYN(ACK起應(yīng)答作用,而SYN起同步作用)放在一個(gè)報(bào)文里來(lái)發(fā)送。但關(guān)閉連接時(shí),當(dāng)收到對(duì)方的FIN報(bào)文通知時(shí),它僅僅表示對(duì)方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對(duì)方了,所以你可以未必會(huì)馬上會(huì)關(guān)閉SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對(duì)方之后,再發(fā)送FIN報(bào)文給對(duì)方來(lái)表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的ACK報(bào)文和FIN報(bào)文多數(shù)情況下都是分開(kāi)發(fā)送的。2.為什么TIME_WAIT狀態(tài)還需要等2MSL后才能返回到CLOSED狀態(tài)?這是因?yàn)殡m然雙方都同意關(guān)閉連接了,而且握手的4個(gè)報(bào)文也都協(xié)調(diào)和發(fā)送完畢,按理可以直接回到CLOSED狀態(tài)(就好比從SYN_SEND狀態(tài)到ESTABLISH狀態(tài)那樣);但是因?yàn)槲覀儽仨氁傧刖W(wǎng)絡(luò)是不可靠的,你無(wú)法保證你最后發(fā)送的ACK報(bào)文會(huì)一定被對(duì)方收到,因此對(duì)方處于LAST_ACK狀態(tài)下的SOCKET可能會(huì)因?yàn)槌瑫r(shí)未收到ACK報(bào)文,而重發(fā)FIN報(bào)文,所以這個(gè)TIME_WAIT狀態(tài)的作用就是用來(lái)重發(fā)可能丟失的ACK報(bào)文。

EOF(EndOfFile)4.如果要判斷一個(gè)Socket對(duì)象當(dāng)前是否處于連接狀態(tài),可采用以下方式:socket.isConnected()&&!socket.isClosed();5.如果服務(wù)器有多個(gè)IP地址,我們可以指定其中的一個(gè)作為服務(wù)器的IP地址:ServerSocket(intport,intbacklog,InetAddressbindAddr)bindAddr參數(shù):指定服務(wù)器要綁定的IP地址6.accept方法的調(diào)用方式通常為:while(true){Sockets=ss.accept();7.Socket類提供的半關(guān)閉方法:publicvoidshutdownInput()throwsIOExceptionpublicvoidshutdownOutput()throwsIOException8.設(shè)置該選項(xiàng):publicvoidsetSoLinger(booleanon,intseconds)讀取該選項(xiàng):publicintgetSoLinger()SO_LINGER選項(xiàng)用來(lái)控制Socket關(guān)閉時(shí)的行為默認(rèn)on參數(shù)值為false,表示調(diào)用close方法會(huì)立即返回,但底層協(xié)議棧會(huì)把剩余數(shù)據(jù)發(fā)送完畢,或等待2MSL時(shí)間socket.setSoLinger(true,0):執(zhí)行close()方法時(shí),會(huì)立即返回,底層的協(xié)議棧也會(huì)立即關(guān)閉,所有未發(fā)送完的剩余數(shù)據(jù)被丟棄。socket.setSoLinger(true,3600):執(zhí)行close()方法不會(huì)立即返回,而進(jìn)入阻塞狀態(tài),同時(shí),底層的協(xié)議棧會(huì)嘗試發(fā)送剩余的數(shù)據(jù)。只有滿足以下兩個(gè)條件之一,close()方法才返回:底層的協(xié)議棧已經(jīng)發(fā)送完所有的剩余數(shù)據(jù)。設(shè)置的時(shí)間消耗完,剩余未發(fā)送的數(shù)據(jù)被丟棄。第一次實(shí)驗(yàn)實(shí)驗(yàn)題目:網(wǎng)絡(luò)地址編程實(shí)驗(yàn)內(nèi)容:利用InetaAddress的靜態(tài)函數(shù)getAllByName獲取新浪網(wǎng)站的地址,并在控制臺(tái)顯示輸出配置自己的機(jī)器,為自己機(jī)器添加多個(gè)IP地址;安裝IPv6協(xié)議編寫(xiě)程序,判斷本機(jī)的IP地址是IPv4地址還是IPv6地址import.Inet4Address;import.Inet6Address;import.InetAddress;import.UnknownHostException;publicclassMyIPTest{ publicstaticvoidmain(String[]args){ if(args.length==0) return; try{ InetAddressaddress=InetAddress.getByName(args[0]); System.out.println("IP地址:"+address.getHostAddress()); switch(address.getAddress().length){ case4: System.out.println("根據(jù)地址長(zhǎng)度判斷,這個(gè)地址是IPv4地址"); break; case16: System.out.println("根據(jù)地址長(zhǎng)度判斷,這個(gè)地址是IPv6地址"); break; } if(addressinstanceofInet4Address) System.out.println("根據(jù)地址類型判斷,這個(gè)地址是IPv4地址"); if(addressinstanceofInet6Address) System.out.println("根據(jù)地址類型判斷,這個(gè)地址是IPv6地址"); }catch(UnknownHostExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } }}第二次實(shí)驗(yàn):實(shí)驗(yàn)題目:串行網(wǎng)絡(luò)聊天程序設(shè)計(jì)實(shí)驗(yàn)內(nèi)容:利用ServerSocket類和Socket類編寫(xiě)客戶端和服務(wù)器端程序,實(shí)現(xiàn)“學(xué)舌”網(wǎng)絡(luò)程序修改“學(xué)舌”程序的服務(wù)器端,實(shí)現(xiàn)服務(wù)器端和客戶端的串行聊天程序、importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;import.InetSocketAddress;import.Socket;importjava.util.Scanner;publicclassClient{ publicstaticvoidmain(String[]args)throwsIOException{ Sockets=newSocket(); s.bind(null); s.connect(newInetSocketAddress("localhost",8000)); BufferedReaderbf=newBufferedReader(newInputStreamReader(s.getInputStream())); PrintWriterpw=newPrintWriter(s.getOutputStream(),true); Scannerscanner=newScanner(System.in); Stringstr=scanner.nextLine(); while(str!=null){ pw.println(str); if(str.equals("bye"))break; Stringstr1=bf.readLine(); System.out.println("從服務(wù)器端收到的信息>"+str1); str=scanner.nextLine(); } s.close(); }}importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.PrintWriter;import.InetSocketAddress;import.ServerSocket;import.Socket;publicclassServer{ publicstaticfinalintport=8000; publicstaticvoidmain(String[]args)throwsIOException{ ServerSocketss=newServerSocket(); ss.bind(newInetSocketAddress(port)); System.out.println("服務(wù)器啟動(dòng)"); while(true){ Sockets=ss.accept(); BufferedReaderbf=newBufferedReader(newInputStreamReader(s.getInputStream())); PrintWriterpw=newPrintWriter(s.getOutputStream(),true); Scannerscanner=newScanner(System.in); Stringstr=bf.readLine(); while(!str.equals("bye")){ System.out.println("接收到信息"+str); Stringmsg=scanner.nextLine(); pw.println(msg); str=bf.readLine(); } s.close(); } //ss.close(); }}第三次實(shí)驗(yàn):實(shí)驗(yàn)題目:多線程并行網(wǎng)絡(luò)聊天程序設(shè)計(jì)實(shí)驗(yàn)內(nèi)容:復(fù)習(xí)Java創(chuàng)建線程的兩種方式(繼承Thread類及實(shí)現(xiàn)Runnable接口)改造實(shí)驗(yàn)二的程序,使之成為多線程并行的網(wǎng)絡(luò)聊天程序packagemultithread1;importjava.io.*;import.*;publicclassEchoServer{ publicEchoServer()throwsIOException{ } publicvoidservice(){ } publicstaticvoidmain(Stringargs[])throwsIOException{ ServerSocketserverSocket=newServerSocket(8000); System.out.println("服務(wù)器啟動(dòng)"); while(true){ Socketsocket=serverSocket.accept();//接收客戶連接 ThreadworkThread=newThread(newHandler(socket));//創(chuàng)建一個(gè)工作線程 workThread.start();//啟動(dòng)工作線程 } }}classHandlerimplementsRunnable{ privateSocketsocket; publicHandler(Socketsocket){ this.socket=socket; } publicvoidrun(){ try{ System.out.println("接受一個(gè)新的連接請(qǐng)求" +socket.getInetAddress()+":"+socket.getPort()); BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream())); PrintWriterpw=newPrintWriter(socket.getOutputStream(),true); Stringmsg=null; while((msg=br.readLine())!=null){ System.out.println(msg); pw.println("echo:"+msg); if(msg.equals("bye")) break; } }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ if(socket!=null) socket.close(); }catch(IOExceptione){ e.printStackTrace(); } } }}第四次實(shí)驗(yàn):實(shí)驗(yàn)題目:非阻塞網(wǎng)絡(luò)聊天程序設(shè)計(jì)實(shí)驗(yàn)內(nèi)容:熟悉非阻塞編程中需要使用的四個(gè)通信類和兩個(gè)輔助類編寫(xiě)非阻塞模式的客戶端和服務(wù)器端程序,實(shí)現(xiàn)非阻塞的網(wǎng)絡(luò)聊天packagenonblock;importjava.io.*;importjava.nio.*;importjava.nio.channels.*;importjava.nio.charset.*;import.*;importjava.util.*;publicclassEchoServer{privateSelectorselector=null;privateServerSocketChannelserverSocketChannel=null;privateintport=8000;privateCharsetcharset=Charset.forName("GBK");publicEchoServer()throwsIOException{selector=Selector.open();serverSocketChannel=ServerSocketChannel.open();serverSocketChannel.socket().setReuseAddress(true);serverSocketChannel.configureBlocking(false);serverSocketChannel.socket().bind(newInetSocketAddress(port));System.out.println("服務(wù)器啟動(dòng)");}publicvoidservice()throwsIOException{serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT);while(selector.select()>0){SetreadyKeys=selector.selectedKeys();Iteratorit=readyKeys.iterator();while(it.hasNext()){SelectionKeykey=null;try{key=(SelectionKey)it.next();it.remove();if(key.isAcceptable()){ServerSocketChannelssc=(ServerSocketChannel)key.channel();SocketChannelsocketChannel=(SocketChannel)ssc.accept();System.out.println("接收到客戶連接,來(lái)自:"+socketChannel.socket().getInetAddress()+":"+socketChannel.socket().getPort());socketChannel.configureBlocking(false);ByteBufferbuffer=ByteBuffer.allocate(1024);socketChannel.register(selector,SelectionKey.OP_READ|SelectionKey.OP_WRITE,buffer);}if(key.isReadable()){receive(key);}if(key.isWritable()){send(key);}}catch(IOExceptione){e.printStackTrace();try{if(key!=null){key.cancel();key.channel().close();}}catch(Exceptionex){e.printStackTrace();}}}//#while}//#while}publicvoidsend(SelectionKeykey)throwsIOException{ByteBufferbuffer=(ByteBuffer)key.attachment();SocketChannelsocketChannel=(SocketChannel)key.channel();buffer.flip();//把極限設(shè)為位置,把位置設(shè)為0Stringdata=decode(buffer);//讀取0-limit,p指針變?yōu)閘imitif(data.indexOf("\r\n")==-1)return;StringoutputData=data.substring(0,data.indexOf("\n")+1);System.out.print(outputData);ByteBufferoutputBuffer=encode("echo:"+outputData);while(outputBuffer.hasRemaining())socketChannel.write(outputBuffer);ByteBuffertemp=encode(outputData);buffer.position(temp.limit());pact();if(outputData.equals("bye\r\n")){key.cancel();socketChannel.close();System.out.println("關(guān)閉與客戶的連接");}}publicvoidreceive(SelectionKeykey)throwsIOException{ByteBufferbuffer=(ByteBuffer)key.attachment();SocketChannelsocketChannel=(SocketChannel)key.channel();ByteBufferreadBuff=ByteBuffer.allocate(32);socketChannel.read(readBuff);readBuff.flip();buffer.limit(buffer.capacity());buffer.put(readBuff);//參數(shù)是一個(gè)Buffer,將參數(shù)buffer中p到limit之間的數(shù)據(jù)拷貝到調(diào)用緩沖區(qū)中}publicStringdecode(ByteBufferbuffer){//解碼CharBuffercharBuffer=charset.decode(buffer);returncharBuffer.toString(); }publicByteBufferencode(Stringstr){//編碼returncharset.encode(str);}publicstaticvoidmain(Stringargs[])throwsException{EchoServerserver=newEchoServer();server.service();}}第五次實(shí)驗(yàn):實(shí)驗(yàn)題目:UDP網(wǎng)絡(luò)聊天程序?qū)嶒?yàn)內(nèi)容:熟悉UDP編程使用的DatagramPackage類和DatagramSocket類編寫(xiě)簡(jiǎn)單的使用UDP協(xié)議進(jìn)行網(wǎng)絡(luò)聊天的程序import.*;importjava.io.*;publicclassEchoClient{privateStringremoteHost="localhost";privateintremotePort=8000;privateDatagramSocketsocket;publicEchoClient()throwsIOException{socket=newDatagramSocket();//與本地的任意一個(gè)UDP端口綁定}publicstaticvoidmain(Stringargs[])throwsIOException{newEchoClient().talk();}publicvoidtalk()throwsIOException{try{InetAddressremoteIP=InetAddress.getByName(remoteHost);BufferedReaderlocalReader=newBufferedReader(newInputStreamReader(System.in));Stringmsg=null;while((msg=localReader.readLine())!=null){byte[]outputData=msg.getBytes();DatagramPacketoutputPacket=newDa

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論