版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
./課程設(shè)計(jì)課程名稱計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)題目名稱文件傳輸協(xié)議的簡單設(shè)計(jì)與實(shí)現(xiàn)學(xué)生學(xué)院專業(yè)班級____學(xué)號學(xué)生_______________指導(dǎo)教師___________2010年1月5設(shè)計(jì)摘要關(guān)鍵詞:SOCKET編程,FTPclient/server程序摘要:本課程設(shè)計(jì)包含了文件傳輸協(xié)議的簡單設(shè)計(jì)與實(shí)現(xiàn)。文件傳送是各種計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)的基本功能,文件傳送協(xié)議是一種最基本的應(yīng)用層協(xié)議按照客戶/服務(wù)器的模式進(jìn)行工作,提供交互式的訪問,是INTERNET使用最廣泛的協(xié)議之一。文件傳輸協(xié)議的簡單設(shè)計(jì)與實(shí)現(xiàn)建立在計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)之上,使用socket編程接口編寫兩個(gè)程序,分別為客戶程序<client.c>和服務(wù)器程序〔server.c,實(shí)現(xiàn)下述命令功能:get,put,pwd,dir,cd,?,quit等,利用了已有網(wǎng)絡(luò)環(huán)境設(shè)計(jì)并實(shí)現(xiàn)簡單應(yīng)用層協(xié)議。本設(shè)計(jì)包括了具體設(shè)計(jì)任務(wù),基本思路及所涉及的相關(guān)理論,設(shè)計(jì)流程圖,調(diào)試過程中出現(xiàn)的問題及相應(yīng)解決辦法,實(shí)驗(yàn)運(yùn)行結(jié)果,核心程序,個(gè)人體會及建議等。目錄1、文件傳輸協(xié)議的簡單設(shè)計(jì)與實(shí)現(xiàn)181.1具體設(shè)計(jì)任務(wù)181.2基本思路及所涉及的相關(guān)理論181.2.1基本思路-相關(guān)理論181.3設(shè)計(jì)流程圖191.4實(shí)驗(yàn)運(yùn)行情況191.5核心程序22服務(wù)器〔sever程序22客戶〔client程序291.6心得體會37參考文獻(xiàn)382、文件傳輸協(xié)議的簡單設(shè)計(jì)與實(shí)現(xiàn)2.1具體設(shè)計(jì)任務(wù)計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境建立在TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)之上。各計(jì)算機(jī)除了安裝TCP/IP軟件外,還安裝了TCP/IP開發(fā)系統(tǒng)。實(shí)驗(yàn)室各計(jì)算機(jī)具備Windows環(huán)境中套接字socket的編程接口功能,可為用戶提供全網(wǎng)圍的進(jìn)程通信功能。本實(shí)驗(yàn)要求利用這些功能,設(shè)計(jì)和實(shí)現(xiàn)一個(gè)簡單的文件傳送協(xié)議。用socket編程接口編寫兩個(gè)程序,分別為客戶程序<client.c>和服務(wù)器程序〔server.c,該程序應(yīng)能實(shí)現(xiàn)下述命令功能:get:取遠(yuǎn)方的一個(gè)文件put:傳給遠(yuǎn)方一個(gè)文件pwd:顯示遠(yuǎn)主當(dāng)前目錄dir:列出遠(yuǎn)方當(dāng)前目錄cd:改變遠(yuǎn)方當(dāng)前目錄?:顯示你提供的命令quit:退出返回2.2基本思路及所涉及的相關(guān)理論2.2.設(shè)計(jì)程序使客戶端連接的時(shí)候,服務(wù)器將會向客戶端發(fā)回一條消息告知它的IP地址,然后關(guān)閉連接并繼續(xù)接收端口的連接。建立各個(gè)命令功能對應(yīng)的函數(shù),發(fā)送請求,等待服務(wù)器端的服務(wù)。服務(wù)器端初始化WinSock,創(chuàng)建SOCKET,獲取主機(jī)信息,并對客戶端進(jìn)行會話,發(fā)送回復(fù)訊息給客戶端,響應(yīng)完畢后關(guān)閉連接,釋放WinSock。2.2.文件傳送是各種計(jì)算機(jī)網(wǎng)絡(luò)都實(shí)現(xiàn)的基本功能,文件傳送協(xié)議是一種最基本的應(yīng)用層協(xié)議按照客戶/服務(wù)器的模式進(jìn)行工作,提供交互式的訪問,是INTERNET使用最廣泛的協(xié)議之一。計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境建立在TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)之上。各計(jì)算機(jī)除了安裝TCP/IP軟件外,還安裝了TCP/IP開發(fā)系統(tǒng)。實(shí)驗(yàn)室各計(jì)算機(jī)具備Windows環(huán)境中套接字socket的編程接口功能,可為用戶提供全網(wǎng)圍的進(jìn)程通信功能。本設(shè)計(jì)利用這些功能,設(shè)計(jì)和實(shí)現(xiàn)一個(gè)簡單的文件傳送協(xié)議。用socket編程接口編寫兩個(gè)程序,分別為客戶程序<client.c>和服務(wù)器程序〔server.c。2.3設(shè)計(jì)流程圖2.4實(shí)驗(yàn)運(yùn)行情況服務(wù)器端運(yùn)行,默認(rèn)自動(dòng)啟動(dòng)監(jiān)聽,情況如下圖:服務(wù)如果關(guān)閉監(jiān)聽,效果如下圖:客服端運(yùn)行,如下圖:輸入服務(wù)器端的IP和端口號進(jìn)行連接,效果如圖:下面設(shè)置文件保存位置,如圖:下面演示上傳一個(gè)視頻文件,然后再下載下來,其中上傳過程的進(jìn)度信息:上傳完成后的效果圖:下載文件的進(jìn)度提示信息:下載完成后,指定目錄下就有了該文件了:2.5核心程序服務(wù)器〔server程序如下usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.IO;usingSystem.Windows.Forms;namespaceTCP文件傳輸_服務(wù)器{classWorkThread{byte[]buffer;intbufferSize=4096;Threadmythread;Sockethandler;publicWorkThread<SocketworkSocket>{handler=workSocket;buffer=newbyte[bufferSize];mythread=newThread<BeginCommunication>;}publicvoidStart<>{mythread.Start<>;}publicvoidAbort<>{mythread.Abort<>;}privatevoidBeginCommunication<>{while<true>//從客戶端接收數(shù)據(jù),直到連接斷開{try{intreCount=handler.Receive<buffer>;stringinsStr=Encoding.BigEndianUnicode.GetString<buffer,0,reCount>;if<insStr.Substring<0,4>=="name">//收到下文件請求{stringfileName=insStr.Substring<5,insStr.Length-5>;SendFile<fileName,handler>;}elseif<insStr.Substring<0,4>=="boot">//收到獲取根目錄請求{stringlistStr=GetFileNames<"F:",false>;SendString<handler,listStr>;}elseif<insStr.Substring<0,4>=="path">//收到獲取指定目錄容請求{stringpath=insStr.Substring<5,insStr.Length-5>;stringlistStr=GetFileNames<path,false>;SendString<handler,listStr>;}elseif<insStr.Substring<0,4>=="Queu">//獲取下載文件夾請求,回復(fù)完整文件名列表{stringpath=insStr.Substring<5,insStr.Length-5>;stringlistStr=GetFileNames<path,true>;SendString<handler,listStr>;}elseif<insStr.Substring<0,4>=="upld">//收到上傳文件請求{stringreFileName=insStr.Substring<5,insStr.Length-5>;LoadFile<reFileName,handler>;}elseif<insStr.Substring<0,4>=="quit">//收到斷開連接命令{HostQuit<>;break;}}catch{HostQuit<>;break;}}}privatevoidLoadFile<stringreFileName,Sockethandler>{try{FileStreamfs=newFileStream<reFileName,FileMode.Create,FileAccess.Write>;handler.Receive<buffer,8,SocketFlags.None>;//接收文件大小longfilesize=BitConverter.ToInt64<buffer,0>;longreceiveCount=0;while<receiveCount<filesize>//接收文件{intreadcount=handler.Receive<buffer,bufferSize,SocketFlags.None>;fs.Write<buffer,0,readcount>;receiveCount+=readcount;}fs.Close<>;}catch{HostQuit<>;}}privatevoidSendFile<stringfileNmae,Sockethandler>{try{FileStreamfs=newFileStream<fileNmae,FileMode.Open,FileAccess.Read>;longsize=fs.Length;byte[]bysize=BitConverter.GetBytes<size>;handler.Send<bysize,8,SocketFlags.None>;//發(fā)送文件大小BinaryReaderbr=newBinaryReader<fs>;intsendcount=0;while<sendcount<size>//發(fā)送文件{intreadcount=br.Read<buffer,0,bufferSize>;sendcount+=readcount;handler.Send<buffer,readcount,SocketFlags.None>;}}catch{HostQuit<>;}}privatevoidHostQuit<>{GlobalValues.canControl.WaitOne<>;GlobalValues.canControl.Release<>;if<handler.Connected==true>{handler.Shutdown<SocketShutdown.Both>;handler.Close<>;}}privatevoidSendString<Sockethandler,stringlistStr>{byte[]list=Encoding.BigEndianUnicode.GetBytes<listStr>;byte[]listcountbuffer=BitConverter.GetBytes<Convert.ToInt64<list.Length>>;try{handler.Send<listcountbuffer,8,SocketFlags.None>;//發(fā)送列表大小intsendcount=0;while<sendcount<list.Length>//發(fā)送列表{if<sendcount+bufferSize<list.Length>//不是最后一次{inti=handler.Send<list,sendcount,bufferSize,SocketFlags.None>;sendcount+=i;}else{inti=handler.Send<list,sendcount,list.Length-sendcount,SocketFlags.None>;//發(fā)送最后一次sendcount+=i;}}}catch<Exceptione>{MessageBox.Show<"連接斷開.">;}}//fileOnly=true則獲取指定目錄及子目錄所有文件信息,fileOnly=false則獲取指定目錄文件信息及文件夾信息privatestringGetFileNames<stringpath,boolfileOnly>{stringlistStr=string.Empty;DirectoryInfodrct=newDirectoryInfo<path>;foreach<FileSystemInfofsiindrct.GetFileSystemInfos<>>{if<fsiisFileInfo>{//文件FileInfofi=<FileInfo>fsi;listStr+=fi.FullName;listStr+="\n";if<fi.Length<1024>{stringsizeStr=fi.Length.ToString<>+"字節(jié)";listStr+=sizeStr;}elseif<fi.Length<1024*1024>{doubletemp=Convert.ToDouble<fi.Length>/1024;stringsizeStr=string.Format<"{0:F1}",temp>+"KB";listStr+=sizeStr;}elseif<fi.Length<1024*1024*1024>{doubletemp=Convert.ToDouble<fi.Length>/1024/1024;stringsizeStr=string.Format<"{0:F1}",temp>+"MB";listStr+=sizeStr;}else{doubletemp=Convert.ToDouble<fi.Length>/1024/1024/1024;stringsizeStr=string.Format<"{0:F1}",temp>+"GB";listStr+=sizeStr;}listStr+="\n";listStr+=fi.LastWriteTime.ToString<"yyyy-MM-ddhh:mm:ss">;listStr+="\n";}elseif<fsiisDirectoryInfo>{if<fileOnly>{listStr+=GetFileNames<fsi.FullName,true>;}else{//文件夾DirectoryInfodi=<DirectoryInfo>fsi;listStr+=di.FullName;listStr+="\n";listStr+="dir";listStr+="\n";listStr+=di.LastWriteTime.ToString<"yyyy-MM-ddhh:mm:ss">;listStr+="\n";}}}returnlistStr;}}}public服務(wù)器<>{InitializeComponent<>;Control.CheckForIllegalCrossThreadCalls=false;stringHostName=Dns.GetHostName<>;//得到主機(jī)名IPHostEntryIpEntry=Dns.GetHostEntry<HostName>;//得到主機(jī)IPstringstrIPAddr=IpEntry.AddressList[0].ToString<>;tsTxb_IPAdd.Text=strIPAddr;hostIPAddress=IPAddress.Parse<strIPAddr>;Server=newIPEndPoint<hostIPAddress,Convert.ToInt32<tsTxb_Port.Text>>;sock=newSocket<AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp>;sock.Bind<Server>;sock.Listen<10>;stringstr="正在監(jiān)聽端口"+tsTxb_Port.Text+"...";tsLbl_Status.Text="狀態(tài):"+str;AcceptTh=newThread<ThAccept>;AcceptTh.Start<>;//開始監(jiān)聽端口}//下面是監(jiān)聽和停止監(jiān)聽的按鈕事件privatevoidbtn_Start_Click<objectsender,EventArgse>{tsBtn_Start.Enabled=false;tsBtn_Stop.Enabled=true;Server=newIPEndPoint<hostIPAddress,Convert.ToInt32<tsTxb_Port.Text>>;sock=newSocket<AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp>;sock.Bind<Server>;sock.Listen<10>;stringstr="正在監(jiān)聽端口"+tsTxb_Port.Text+"...";tsLbl_Status.Text="狀態(tài):"+str;AcceptTh=newThread<ThAccept>;AcceptTh.Start<>;}privatevoidbtn_stop_Click<objectsender,EventArgse>{tsBtn_Start.Enabled=true;tsBtn_Stop.Enabled=false;try{sock.Shutdown<SocketShutdown.Both>;}catch{}sock.Close<>;tsLbl_Status.Text="狀態(tài):已停止監(jiān)聽";}客戶〔client程序//MyThread.cs中的實(shí)現(xiàn)usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.IO;usingSystem.Net.Sockets;usingSystem.Threading;usingSystem.Windows.Forms;namespace客戶端_TCP文件傳輸{publicclassmyThread{ThreaddownloadTh;ThreaduploadTh;SocketwordSocket;stringfileName;stringsavePath;byte[]buffer;constintbufferSize=4096;ToolStripProgressBartspBar;ToolStripStatusLabelspeed;intstartTime=0;longreceivecount=0;longsendCount=0;intupOrDown=1;//指示上傳或下載System.Windows.Forms.Timertimer1=newSystem.Windows.Forms.Timer<>;publicmyThread<SocketworkSock,stringFileName,stringSavePath,refToolStripProgressBarTspBar,refToolStripStatusLabelSpeed>{wordSocket=workSock;fileName=FileName;savePath=SavePath;buffer=newbyte[bufferSize];downloadTh=newThread<newThreadStart<Download>>;uploadTh=newThread<newThreadStart<Upload>>;tspBar=TspBar;speed=Speed;}publicmyThread<SocketworkSock,stringFileName,refToolStripProgressBarTspBar,refToolStripStatusLabelSpeed>{wordSocket=workSock;fileName=FileName;buffer=newbyte[bufferSize];downloadTh=newThread<newThreadStart<Download>>;uploadTh=newThread<newThreadStart<Upload>>;tspBar=TspBar;speed=Speed;}publicvoidStartDownload<>{upOrDown=1;downloadTh.Start<>;timer1.Enabled=true;timer1.Interval=100;timer1.Tick+=newEventHandler<timer1_Tick>;startTime=System.Environment.TickCount;timer1.Start<>;}publicvoidStartUpload<>{upOrDown=0;uploadTh.Start<>;timer1.Enabled=true;timer1.Interval=50;timer1.Tick+=newEventHandler<timer1_Tick>;startTime=System.Environment.TickCount;timer1.Start<>;}voidtimer1_Tick<objectsender,EventArgse>{intspentTime=System.Environment.TickCount-startTime;if<spentTime!=0>{if<upOrDown==1>{doublesp=Convert.ToDouble<receivecount>/Convert.ToDouble<spentTime>*1000/1024;if<sp<1024>speed.Text=tspBar.Value.ToString<>+"%下載速度:"+string.Format<"{0:F1}",sp>+"KB";elsespeed.Text=tspBar.Value.ToString<>+"%下載速度:"+string.Format<"{0:F1}",sp/1024>+"MB/S";}else{doublesp=Convert.ToDouble<sendCount>/Convert.ToDouble<spentTime>*1000/1024;if<sp<1024>speed.Text=tspBar.Value.ToString<>+"%上傳速度:"+string.Format<"{0:F1}",sp>+"KB";elsespeed.Text=tspBar.Value.ToString<>+"%上傳速度:"+string.Format<"{0:F1}",sp/1024>+"MB/S";}}}privatevoidDownload<>{try{stringins="name="+fileName;byte[]data=Encoding.BigEndianUnicode.GetBytes<ins>;wordSocket.Send<data,data.Length,SocketFlags.None>;//發(fā)送下載請求stringreFileName=savePath+"\\"+GetFileName<fileName>;Directory.CreateDirectory<savePath>;FileStreamfs=newFileStream<reFileName,FileMode.Create,FileAccess.Write>;wordSocket.Receive<buffer,8,SocketFlags.None>;//接收文件大小longfilesize=BitConverter.ToInt64<buffer,0>;while<receivecount<filesize>//接收文件{intreadcount=wordSocket.Receive<buffer,bufferSize,SocketFlags.None>;fs.Write<buffer,0,readcount>;receivecount+=readcount;tspBar.Value=Convert.ToInt32<Convert.ToDouble<receivecount>/Convert.ToDouble<filesize>*100>;}tspBar.Value=100;timer1_Tick<newobject<>,newEventArgs<>>;fs.Close<>;timer1.Stop<>;StaticValue.isBusy=false;}catch{MessageBox.Show<"連接斷開.">;timer1.Stop<>;if<wordSocket.Connected==true>{wordSocket.Shutdown<SocketShutdown.Both>;wordSocket.Close<>;timer1.Stop<>;StaticValue.isBusy=false;}}}privatevoidUpload<>{try{stringshortFileName=fileName.Substring<fileName.LastIndexOf<'\\'>+1,fileName.Length-fileName.LastIndexOf<'\\'>-1>;stringserverFileName=StaticValue.curServerPath+"\\"+shortFileName;//指定上傳到服務(wù)器的哪個(gè)路徑stringins="upld="+serverFileName;byte[]byins=Encoding.BigEndianUnicode.GetBytes<ins>;wordSocket.Send<byins,byins.Length,SocketFlags.None>;//發(fā)送上傳請求及完整文件名FileStreamfs=newFileStream<fileName,FileMode.Open,FileAccess.Read>;longsize=fs.Length;byte[]bysize=BitConverter.GetBytes<size>;wordSocket.Send<bysize,8,SocketFlags.None>;//發(fā)送上傳文件大小BinaryReaderbr=newBinaryReader<fs>;while<sendCount<size>//發(fā)送文件{intreadcount=br.Read<buffer,0,bufferSize>;sendCount+=readcount;wordSocket.Send<buffer,readcount,SocketFlags.None>;tspBar.Value=Convert.ToInt32<Convert.ToDouble<sendCount>/Convert.ToDouble<size>*100>;}tspBar.Value=100;timer1_Tick<newobject<>,newEventArgs<>>;fs.Close<>;timer1.Stop<>;StaticValue.isBusy=false;}catch<Exceptione>{MessageBox.Show<"連接斷開.">;wordSocket.Shutdown<SocketShutdown.Both>;wordSocket.Close<>;timer1.Stop<>;StaticValue.isBusy=false;}}publicstringGetFileName<stringfileName>{returnfileName.Substring<fileName.LastIndexOf<'\\'>+1,fileName.Length-fileName.LastIndexOf<'\\'>-1>;}publicstringGetFileType<stringfileName>{returnfileName.Substring<fileName.LastIndexOf<'.'>,fileName.Length-fileName.LastIndexOf<'.'>>;}}}//下面給出各按鈕點(diǎn)擊事件///<summary>///連接服務(wù)器按鈕點(diǎn)擊事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbtn_Connect_Click<objectsender,EventArgse>{hostIPAddress=IPAddress.Parse<ttxb_IPAdd.Text>;intport=Convert.ToInt32<ttxb_port.Text>;Server=newIPEndPoint<hostIPAddress,port>;sock=newSocket<AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp>;try{sock.Connect<Server>;//連接服務(wù)器toolStripStatusLabel1.Text="與遠(yuǎn)程主機(jī)"+ttxb_IPAdd.Text+""+ttxb_port.ToString<>+"連接成功";RefreshListView<GetDtListArray<"boot",false>>;//獲取服務(wù)器根目錄connectDone=true;tsBtn_Connect.Enabled=false;tsBtn_DisConnect.Enabled=true;}catch{MessageBox.Show<"連接失敗.">;if<sock.Connected==true>{sock.Shutdown<SocketShutdown.Both>;sock.Close<>;}}}///<summary>///下載文件點(diǎn)擊事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbtn_GetFile_Click<objectsender,EventArgse>{DownLoad<listView1>;//調(diào)用自定義方法下載文件}privatevoidDownLoad<ListViewlistView1>{if<listView1.SelectedIndices.Count>0&&listView1.SelectedIndices[0]!=0>//有選定項(xiàng)且選定的不是"返回上層"{stringsize=listView1.SelectedItems[0].SubItems[1].Text;if<size!="">//如果選定的是文件{listView2.Items.Add<listView1.SelectedItems[0].SubItems[0].Text>;listView2.Items[listView2.Items.Count-1].SubItems.Add<size>;//將文件大小加入listViewlistView2.Items[listView2.Items.Count-1].ImageIndex=ICOSearcher.GetIcoIndex<listView1.SelectedItems[0].SubItems[0].Text>;//獲取該文件的圖標(biāo)intindex=listView1.SelectedIndices[0]-1;stringFileName=fullNameList[index];downloadItemnewfile=newdownloadItem<FileName,StaticValue.curSavePath>;downQueue.Enqueue<newfile>;}else//如果是文件夾{stringdownPath=StaticValue.curServerPath+"\\"+listView1.SelectedItems[0].SubItems[0].Text;string[]listArray=GetDtListArray<downPath,true>;Queue<downloadItem>tempQueue=GetDownFileQueue<listArray>;while<tempQueue.Count>0>{downQueue.Enqueue<tempQueue.Dequeue<>>;}}}}///<summary>///設(shè)置保存位置的按鈕點(diǎn)擊事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidtsBtn_savePath_Click<objectsender,EventArgse>{if<folderBrowserDialog1.ShowDialog<>==DialogResult.OK>{StaticValue.curSavePath=folderBrowserDialog1.SelectedPath;}}///<summary>///點(diǎn)擊斷開連接的按鈕事件,斷開連接,并清空listView等///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidtsBtn_DisConnect_Click<objectsender,EventArgse>//{try{stringins="quit";byte[]byins=Encoding.BigEndianUnicode.GetBytes<ins>;sock.Send<byins,byins.Length,SocketFlags.None>;sock.Shutdown<SocketShutdown.Both>;sock.Close<>;tsBtn_Connect.Enabled=true;tsBtn_DisConnect.Enabled=fal
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京工業(yè)大學(xué)浦江學(xué)院《稅收管理》2021-2022學(xué)年第一學(xué)期期末試卷
- 百通馨苑二期三區(qū)18#樓工程安全施工組織設(shè)計(jì)
- 防溺水的說課稿
- 端午節(jié)的說課稿幼兒園
- 《中 國石拱橋》說課稿
- 《憶讀書》說課稿
- 簡單外包合同(2篇)
- 【初中化學(xué)】二氧化碳的實(shí)驗(yàn)室制取教學(xué)課件-2024-2025學(xué)年九年級化學(xué)人教版上冊
- 南京工業(yè)大學(xué)《土質(zhì)學(xué)與土力學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 統(tǒng)一海之言體育旅行定制綜藝案例
- 2024春期國開電大本科《現(xiàn)代漢語專題》在線形考(任務(wù)1至6)試題及答案
- 危險(xiǎn)化學(xué)品目錄2023
- 《神奇的海洋動(dòng)物》PPT課件.ppt
- 組織認(rèn)同研究新進(jìn)展-基本概念及其形成、整合機(jī)制
- 股票分析入門整理-入眠
- 山東預(yù)拌砂漿生產(chǎn)企業(yè)備案登記
- 小學(xué)四年級班家長會班主任PPT課件
- 雙師同堂課題中期報(bào)告
- 怎樣提出好的改善提案5篇
- 《服裝市場營銷》課程標(biāo)準(zhǔn).
- xx醫(yī)院三季度藥事管理委員會會議紀(jì)要
評論
0/150
提交評論