




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、華南農業(yè)大學理學院( 計算機網絡 )課程設計實驗時間: 2010學年第二學期 專業(yè)年級: 2008級應數(shù)2班 實驗題目: 基于TCP/IP協(xié)議的網絡通信應用程序 學生姓名:王曉珊學號 _18_自評成績_95教師評成績_學生姓名:黃如萍_學號 06_自評成績_95_教師評成績_學生姓名_學號 _自評成績_教師評成績_學生姓名_學號 _自評成績_教師評成績_指導老師: 黃小虎 1 / 32基于TCP/IP協(xié)議的網絡通信小應用程序1. 課程設計的題目及要求1.1 課程設計題目掌握基于TCP/IP協(xié)議實現(xiàn)網絡通信,理解TCP與UDP的不同特性以及實現(xiàn)方式。課程設計要求建立一個基于TCP/IP協(xié)議的網絡
2、通信小應用程序,實驗可采用UDP或TCP,建議基于WINDOWS平臺。1.1.1 功能要求建立一個基于中心服務器方式即時數(shù)據通信平臺(IM)。要求如下(*為選做內容): 1. 能進行用戶管理,所有用戶必須登錄到服務器,由服務器維護在線信息。 2. IM(Instant Message)功能:用戶登錄后能進行實時多方點到點短信息通信,如聊天; 3. 能選擇要求服務器進行轉發(fā)服務; 4. 能保存通信記錄到數(shù)據庫(SQL Server或其他桌面型數(shù)據庫); 5. 能進行雙方文件傳輸,能顯示進度; 6. 支持斷點重傳。(檢查時需有功能隨時中斷傳送,并在下次啟動能顯示重傳狀態(tài)); *7. 數(shù)據包加密;8
3、.實時語音雙向傳送功能;*9.多方通話功能;10.界面設計要求布局合理,信息清晰。1.1.2 對于所有功能的要求1) 要求清晰描述所設計的應答機制,數(shù)據包格式,所用數(shù)據結構及其相應算法,機密機制等;2) 對于功能實現(xiàn)要求描繪實現(xiàn)方法,流程。2 / 323 / 322. 開發(fā)工具、軟硬件環(huán)境簡介2.1 開發(fā)工具開發(fā)工具:Microsoft Visual Studio 20082.2 軟硬件環(huán)境2.2.1 軟件環(huán)境l 操作系統(tǒng):Windows XP/Windows 7l 開發(fā)軟件:Microsoft Visual Studio 2008l 開發(fā)語言:C#語言l 平臺:Microsoft.NET F
4、ramework v2.02.2.2 硬件環(huán)境l 分辨率:1000×750l 服務器: PentiumIII 500以上或更高;內存:128M以上;硬盤:至少40G以上; l 工作站: PentiumII 266以上微機;內存:64MB硬盤: 至少5G以上; 3. 程序實現(xiàn)的基本思想3.1 程序設計分析本設計實現(xiàn)的基于TCP/IP協(xié)議的網絡通信小應用程序,實際上是一個基于Socket的聊天室。聊天室主要由聊天室服務器和聊天室客戶端組成。聊天室服務器負責管理和客戶端連接并發(fā)送消息給客戶端;聊天室客戶端負責接收或者發(fā)送聊天消息,登錄聊天室服務器等。一個聊天室服務器應該支持多個聊天室客戶端
5、進行同時連接。聊天室服務器和聊天室客戶端之間根據聊天協(xié)議進行通信。4 / 323.2 基本思想程序的實現(xiàn)主要分為兩大部分,即服務器部分和客戶端部分。程序首先設計聊天室的服務器,再設計客戶端部分,最后生成可執(zhí)行文件。1 服務器服務器端管理著聊天任務,它維持著一張當前在線用戶的列表,轉發(fā)用戶發(fā)送來的消息。設計思想如下:3) 利用控件設計窗體;4) 功能實現(xiàn);Ø 監(jiān)聽本機IP地址中的一個指定的端口;Ø 當有客戶端向該端口發(fā)出請求時,服務器程序立刻建立一個與該客戶端的連接并啟動一個新的線程來處理該客戶端;Ø 根據客戶端發(fā)送來的各種不同的請求,執(zhí)行相應的操作,并將結果返回給
6、客戶端。5) 運行調試。2 客戶端客戶端應用程序包含用戶登錄窗口和用戶聊天的主窗口,它允許用戶登錄到服務器,可以向服務器發(fā)送消息,同時可以接收從服務器返回的信息。1) 設計登錄窗體和聊天窗體;2) 基于課程設計的要求實現(xiàn)各窗體對應的功能;Ø 向服務器發(fā)送連接請求;Ø 得到服務器程序的確認后,建立與服務器的連接,并獲得與服務器交互的流通道;Ø 通過網絡流通道與服務器端的程序進行數(shù)據通信。3) 運行調試。5 / 324. 系統(tǒng)功能框架圖、系統(tǒng)流程圖4.1 功能框架圖圖1 功能框架圖6 / 324.2 系統(tǒng)流程圖圖2系統(tǒng)流程圖5. 具體實現(xiàn)過程5.1 設計準備5.1.1
7、 TCP的運用客戶端只能和服務器通信,無法和另外一個客戶端直接通信。為了使兩個客戶端能相互通信,所有的客戶一律先把聊天信息發(fā)給服務器,并告訴服務器改信息是發(fā)送給哪個客戶的,服務器收到信息后,再將該信息轉發(fā)給另外一個客戶。本設計的實現(xiàn)主要用了TcpListener類用于用于偵聽和接受傳入的連接請求。8 / 32基本方法:表1 TCP連接基本方法TcpListener類基本方法作用Start啟動監(jiān)聽Stop關閉TcpListener并停止監(jiān)聽請求AcceptSocket在同步阻塞方式下獲取并返回一個用來接收和發(fā)送數(shù)據的Socket對象,同時從傳入的連接隊列中移除該客戶端的連接請求5.1.2 Soc
8、ket套接字的運用本設計中自定義了通信程序的可識別命令(見以下第三小點),即自定義的簡單協(xié)議。故程序中為支持自定義的協(xié)議,采用套接字來實現(xiàn)。根據連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為服務器監(jiān)聽,客戶端請求,連接確認三個步驟。n 服務器監(jiān)聽:服務器套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網絡狀態(tài)。n 客戶端請求:由客戶端的套接字提出連接請求,要連接的目標是服務器的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器套接字的地址和端口號,然后再向服務器套接字提出連接請求。n 連接確認:當服務器套接字監(jiān)聽到客戶端套接字
9、的連接請求時,它就響應客戶端套接字的請求,把服務器套接字的信息發(fā)給客戶端,一旦客戶端確認了此信息,連接即可建立。而服務器套接字繼續(xù)監(jiān)聽其他客戶端套接字的連接請求。服務器和客戶端必須分別進行編程,它們之間的連接如下圖所示。8 / 32 圖3 服務器與客戶端的連接圖5.1.3 通信程序中可識別命令的定義程序中定義的可識別命令格式為兩個一位整數(shù)拼接成的字符串,每位的含義如下: 第一位 第一位為0:客戶機向服務器發(fā)送的命令 第一位為1:服務器向客戶機發(fā)送的命令 "01"-離線 "02"-請求在線列表 可以識別的命令格式 "03"-請求對所有人
10、閃屏振動第二位 服務端 "04"-請求對指定用戶閃屏振動 "05"-請求廣播消息 "06"-請求對指定用戶發(fā)送文件要求轉發(fā)給指定用戶的用戶名 :轉發(fā)給指定用戶 "11"-服務器要求客戶機更新在線列表 客戶端 "12"-服務器要求客戶機做閃屏振動 default-接受用戶消息或者系統(tǒng)消息的正文9 / 326. 服務器具體設計6.1.1 窗體設計新建一個Windows窗體,命名為Form1.cs,主要用于連接服務器。只有建立了聊天室服務器,客戶才能連接到上面,從而進行聊天。服務器建立之后,一般處于監(jiān)
11、聽狀態(tài),等待客戶機的連接申請。窗體用到的主要控件如下表所示。表2 主要控件控件類型控件名字用途按鈕兩個按鈕,分別用于連接服務器和退出連接標簽兩個標簽,一個為“端口號”,另一個為顯示“默認端口號”文本框兩個文本框,一個用于用戶輸入端口號,另一個用于顯示服務器連接等系統(tǒng)消息圖4 窗體設計圖10 / 326.1.2 編碼1) 創(chuàng)建服務器這部分程序的編寫主要是實現(xiàn)“獲得有效的端口號和IP地址”,設計要點:l 自動獲取IP地址IPAddress _ip = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName().AddressList0.
12、Address);l 可以自主選擇是否輸入端口號端口號是進程的標識,端口號范圍從0到65535。由于1000以內的端口大多被標準協(xié)議占用,所以程序中可以自由使用的端口號一般都用大于1000的值。若輸入端口號,程序設置了有效端口號的范圍為1023與65535之間。若端口有效則連接服務器,并提示相應的信息;默認端口號設置為8888若沒有輸入端口號,或者端口號無效,則程序自動使用默認端口號連接服務器。代碼如下:private void button1_Click(object sender, EventArgs e) this.button1.Enabled = false; string port
13、Param; portParam = textBox_port.Text; if (portParam != string.Empty) if (!int.TryParse(portParam, out _port) | _port < 1023 | _port > 65535) _port = 8888; textBox1 .AppendText ("端口號不合法,默認端口號被接受!"); textBox1 .AppendText ("服務器已啟動,正在監(jiān)聽.n"); textBox1 .AppendText (string.Format(
14、"服務器IP:0t端口號:1n", _ip, _port); _tcpl =new TcpListener (_ip, _port); _tcpl.Start(); trd = new Thread(new ThreadStart(this.ThreadTask); trd.Start(); 11 / 32 2) 線程監(jiān)聽和執(zhí)行由服務器和客戶端的聊天室模型可以看出,服務器跟客戶端的連接以及客戶端之間的連接都是通過執(zhí)行流實現(xiàn)的,即每一個獨立的執(zhí)行流都是一個線程。編寫線程監(jiān)聽和線程執(zhí)行體監(jiān)聽來自多個客戶端的請求。l 線程監(jiān)聽在創(chuàng)建服務器代碼中,可以看到若輸入端口號有效,則執(zhí)行T
15、cpListener類偵聽和接受傳入的連接請求,并開啟線程調用ThreadTask方法。ThreadTask方法要點:1) Socket套接字接受連接方法;2) 驗證用戶名是否唯一,若當前哈希表沒有該用戶允許連接,否則連接失??;3) 調用線程執(zhí)行體;4) 向所有用戶發(fā)送系統(tǒng)消息,AppendText方法在文本框中追加入系統(tǒng)消息,并用foreach循環(huán)將系統(tǒng)消息傳給各個客戶端。l 線程執(zhí)行體線程執(zhí)行體主要用于客戶端和服務器轉發(fā)消息。線程執(zhí)行體實際上也是聊天室中服務器端的聊天依據,即我們自定義的協(xié)議解析。這部分的程序流程如下圖。12 / 32圖5 客戶端程序流程圖5) 退出連接編程要點:(1)TC
16、P停止監(jiān)聽; (2)清除在線列表。代碼如下:private void button2_Click(object sender, EventArgs e) if (_tcpl != null) _tcpl.Stop(); /關閉客戶端連接并清理資源 if (_transmit_tb.Count != 0) foreach (Socket session in _transmit_tb.Values) 13 / 32 session.Shutdown(SocketShutdown.Both); _transmit_tb.Clear(); _transmit_tb = null; Close();6
17、.2 客戶端具體設計6.2.1 登錄窗體1 窗體設計圖新建一個Windows窗體,命名為login_frm.cs,主要用于驗證登錄信息,保證登錄的用戶不重復,端口號和IP地址有效。主要控件如下表所示:表3 用戶端登錄界面的窗體設計控件類型控件名字用途框架為一組控件添加一個有標題的框架“請登錄”標簽三個標簽,分別為“用戶名”、“服務器IP”、“端口號”,提示相應TextBox的信息文本框三個文本框,一個用于輸入用戶名,另外兩個用于顯示服務器IP和端口號,也可根據實際情況輸入合法的服務器IP和端口號按鈕兩個按鈕,分別為“登錄”和“取消”,前者為登錄聊天室,點擊后者將會關閉登錄界面14 / 32 圖
18、6 用戶登陸界面2 程序要點1) TCP連接新建一個TCP連接類TCPConnection,初始化IP地址、端口號和TcpClient新實例,使用指定的IP地址和端口號連接到TCP主機。2) 驗證登錄信息用戶輸入用戶名、服務器IP地址和端口號,若是輸入的IP地址無效,則提示“IP地址不合法”;如果輸入的端口號無法轉化為等效的32位有符號整數(shù),或不在1024-65535之間,則提示“端口號不合法”。否則則進行服務器連接。3) 向服務器發(fā)出連接請求并向服務器發(fā)送用戶名以確認身份如果客戶端連接不到服務器,則提示“無法連接到服務器,請重試”,不然向服務器發(fā)送用戶名以確認身份,將輸入的用戶名轉化為UTF
19、-16格式的編碼,寫入NetworkStream,再進行讀取,若是已經存在,則提示"您的用戶名已經被使用,請嘗試其他用戶名!",如果不存在,則獲取當前登錄窗體的文本,并進入聊天界面。6.2.2 聊天窗體l 窗體設計新建一個Windows窗體,作為一個聊天的界面。 選擇聊天室則進行廣播,選擇悄悄話則進行一對一聊天,點對點地發(fā)送文件。還可修改皮膚顏色,對發(fā)送數(shù)據進行加密、解密。16 / 32窗體用到的主要控件如表所示。表4 客戶端主界面的聊天窗口設計控件類型控件名字用途圖片框兩個圖片框,用于顯示圖像標簽八個標簽,其中兩個分別提示當前用戶和服務器IP、端口號,另外六個提示相應的文
20、本框內容或操作有格式文本控件一個有格式文本控件,提供高級文本輸入和編輯功能,顯示通信內容文本框五個文本框,一個用于輸入待發(fā)送的內容,兩個分別顯示加密或解密后的內容,其它兩個分別顯示待發(fā)送和已接收的文件所在路徑文本框一個文本框,下拉式顯示當前在線的所有用戶名,可用于選擇接收方單選框兩組單選框,一組用于選擇皮膚顏色,含三個;一組用于選擇聊天室還是悄悄話進度條兩個進度條,顯示文件傳輸和保存進度按鈕十個按鈕,分別用于顯示皮膚顏色,保存、消除聊天記錄,選擇、發(fā)送、保存文件,加密、解密發(fā)送信息,關閉界面l 線程執(zhí)行體這部分是與服務器相對應的。當客戶端連接到服務器后,服務器立刻建立一個數(shù)據接收的獨立線程。在
21、接收線程中,對命令進行解析處理。程序流程如下圖。16 / 32圖 7 客戶端程序框圖l 功能模塊1 聊天功能1) 一對多聊天在聊天室模式下進行聊天信息發(fā)送,則將相關信息寫入網絡流,并向服務器發(fā)送廣播請求。本地信息接收框會顯示聊天狀態(tài)、發(fā)送時間和信息內容,其它所有在線用戶會顯示發(fā)送方用戶名、發(fā)送時間和信息內容。17 / 32相關代碼:/如果是聊天室模式則向服務器發(fā)送廣播請求 if (broadcast_rb.Checked) localTxt = string.Format("廣播您在 0 對所有人說:rn1rnrn", DateTime.Now, msg); sendTxt
22、 = string.Format("廣播0 在 1 對所有人說:rn2rnrn", _username, DateTime.Now, msg); /發(fā)送廣播請求 _nws.Write(new byte 0, 5 , 0, 2); /_nws是用于發(fā)送和接收信息的網絡流 2) 一對一私聊選擇進行“悄悄話”,則需要在當前在線用戶在選擇一方進行聊天,沒有選擇用戶則無法進行通信,會有提示“請選擇一個接收者!n如果沒有接受者可選,表明當前只有您一個人在線”。發(fā)送方會接收到消息,提示發(fā)送時間、接收者的用戶名和發(fā)送的內容,接收方會接收到發(fā)送方的用戶名、發(fā)送時間和發(fā)送的內容。2 聊天記錄1
23、) 保存聊天記錄點擊保存聊天記錄,會創(chuàng)建一個SaveFileDialog新實例,另存文件類型設定為*.txt,輸入保存的文件名,就會將當前接收信息文本框的所有內容以文本文件保存。private void save_btn_Click(object sender, EventArgs e) DialogResult ret; SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "文本文件(*.txt)|*.txt" sfd.AddExtension = true; if (ret = sfd.ShowDialog()
24、 = DialogResult.OK) chatrcd_rtb.SaveFile(sfd.FileName, RichTextBoxStreamType.PlainText); 2) 清除聊天記錄點擊清除聊天記錄的按鈕后,出現(xiàn)提示信息“確實消除嗎?消除后不可恢復?!边x擇確定則調用clear()方法將當前的接收信息框的內容全部清空。18 / 32 圖8 清除聊天記錄提示窗口3 文件傳輸l 選擇文件點擊“選擇文件”,進入打開文件對話框,根據文件類型篩選文件,找到要發(fā)送的文件,點擊確定后,讀取所選文件所在路徑名。l 發(fā)送文件這一功能只能在“悄悄話”中實現(xiàn),在“聊天室”模式下會提示“不能在聊天室發(fā)送文
25、件”,還需要選擇一個接收方,否則會提示“請選擇一個接收者!n如果沒有接受者可選,表明當前只有您一個人在線”。如果文件路徑名為空,則提示“請選擇文件傳輸路徑”,否則,根據路徑名為指定的路徑名初始化StreamReader的一個新實例sr,讀取文件內容,關閉sr,并釋放與讀取器相關的所有系統(tǒng)資源,并啟動控制發(fā)送進度條的定時器。l 保存文件點擊接收文件,彈出保存文件對話框,選擇文件保存路徑;為指定路徑的指定文件初始化StreamWriter新實例,使用TextWriter.WriteLine(String value)方法將后跟行結束符的字符串寫入文本流,同時啟動控制進度條的定時器。4 數(shù)據加密這部
26、分采用RSA算法來實現(xiàn)。先初始化RSA對象,再使用RSA算法進行解密和加密。下表是RSA算法應用方法的說明。19 / 32表5 算法應用方法的說明名稱說明Encrypt方法使用RSA算法對數(shù)據進行加密。該方法有兩個參數(shù),第一個參數(shù)是被加密的字節(jié)數(shù)組,第二個參數(shù)是填充方式(true表示使用OAEP方式填充,false表示使用PKCS#1.5版填充),如果操作系統(tǒng)是Windows XP及其以上版本,可以使用true,如果是Windows 2000及其以上版本,使用falseDescrypt方法使用RSA算法對數(shù)據進行加密。其它內容與上相同。具體代碼實現(xiàn)如下:/ <summary> /
27、使用RSA算法進行解密 / </summary> / <param name="text">要加密的字符串</param> / <returns></returns> private string RSAEncrypt(string text) RSACryptoServiceProvider rsa = GetRSAProviderFromContainer("rsa1"); byte bytes = Encoding.Unicode.GetBytes(text); byte encrypte
28、dData = rsa.Encrypt(bytes, true); return Convert.ToBase64String(encryptedData); / <summary> / 使用RSA算法進行解密 / </summary> / <param name="text">要解密的字符串</param> / <returns></returns> private string RSADescrpt(string text) RSACryptoServiceProvider rsa = GetRSA
29、ProviderFromContainer("rsa1"); byte encryptedData = Convert.FromBase64String(text); byte decryptedData = rsa.Decrypt(encryptedData, true); return Encoding.Unicode.GetString(decryptedData); / <summary> / 獲取初始化RSA對象 / </summary> / <param name="containerName">密鑰容器名
30、</param> / <returns>RSA對象</returns>20 / 32 private static RSACryptoServiceProvider GetRSAProviderFromContainer(string containerName) CspParameters cp = new CspParameters(); /將 ProviderType初始化為值24,該值指定PROV_RSA_AES提供程序 cp.ProviderType = 24; /如果不存在名為containerName的密鑰容器,則創(chuàng)建之,并初始化cp /如果存
31、在,則直接根據它保存的內容初始化cp cp.KeyContainerName = containerName; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp); return rsa; 7. 運行結果及分析7.1 服務器 創(chuàng)建連接后,服務器一直處于監(jiān)聽狀態(tài),同時用AppendText方法不斷追加文本,顯示系統(tǒng)消息在文本框中。示意圖如下。圖9 服務器界面21 / 327.2 客戶端7.2.1 登錄窗體登錄窗體的設計只涉及驗證用戶名是否唯一、端口號是否有效、服務器IP是否合法。并沒有提供新用戶的注冊,這是本設計的不足之
32、一。如果端口號不正確,用戶名不唯一,程序都提供相應的提示。圖10 服務器登陸錯誤提示22 / 327.2.2 聊天窗體1 聊天主窗體圖11 聊天主窗體2 保存聊天記錄點擊聊天窗體的“保存聊天記錄”按鈕,彈出對話框如下圖,命名文件名字,按“保存”就可得到存儲聊天記錄的txt文本。23 / 32圖12 保存聊天記錄窗口txt內容顯示圖:圖13 消息記錄24 / 323 文件傳輸文件傳輸進度效果圖:圖14 文件傳輸進度效果圖25 / 324 數(shù)據加密圖15 數(shù)據加密效果圖接收方內容顯示圖: 圖16 接收方內容顯示圖26 / 328. 總結8.1 王曉珊總結這次課程設計雖然總體感覺很難,但在這個過程中
33、學到了很多新的知識。本次課程設計建立一個基于TCP/IP協(xié)議的網絡通信小應用程序,它的功能類似于我們生活中經常使用的QQ,我想每個做了這個課程設計的同學,至少都學到了一點,那就是知道我們所用的QQ軟件是用什么怎么開發(fā)出來的。以下是我做課程設計的幾點總結。程序設計知識方面,這次的設計涉及了TCP,Socket套接字,線程,網絡流等網絡應用編程知識。可以說對于這些知識我都很陌生。開始設計時,通過書籍查閱,并利用視頻學習才弄清了整個設計的思路。這才使整個設計找到了起點。通信應用程序兩個客戶之間的通信必須通過客戶端來實現(xiàn),因此分別設計服務器和客戶端是必要的。對于服務端,啟動服務器后TcpListene
34、r監(jiān)聽端口,當有客戶端連接后,通過AcceptSocket返回與客戶端連接的Socket對象,然后通過讀寫Socket對象完成與聊天室客戶端的數(shù)據傳輸。而客戶端啟動后,則創(chuàng)建Socket對象并通過對象連接服務器,成功后通過socket完成數(shù)據的接收和發(fā)送。此外,服務器和客戶端的每個連接都是線程的使用。程序設計遇到的問題方面,一方面是線程Thread類的使用,經常出現(xiàn)各種錯誤。比如,運行客戶端程序后,用可執(zhí)行文件打開另外一個窗口進行通信,程序就會出現(xiàn)如下圖的錯誤,并顯示“線程間操作無效”,但是如果兩個窗口同時是用可執(zhí)行文件打開,則不會出現(xiàn)這樣的錯誤。另一方面是數(shù)據加密與解密的設計,主要使用了RSA算法。所遇到的問題是解密的設計一直沒法運行成功。出現(xiàn)錯誤的現(xiàn)象是運行的兩個聊天窗體同時消失。最后我們并沒有將解密算法成功的應用,而采用了簡單的同時發(fā)送加密碼和文本消息,并在接收方顯示。程序改進方面,一是我們的登錄部分沒有設置新用戶的注冊,只要用戶名唯一,端口與IP正確即可成功登錄。這會給用戶登錄造成混亂。另一方面,設計的解密功能沒有真正實現(xiàn)。最后,語音功能與斷點傳送功能都是程序可以擴充改進的地方。27 / 32綜合本次設計,我們小組嚴格按照設計的要求,分析應
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- u盤供貨合同范本
- 住宅贈予合同范本
- 農業(yè)種子買賣協(xié)議合同范本
- 化妝服務合同范本簡易
- 業(yè)務指導合同范本
- 2024年招商銀行呼和浩特分行招聘考試真題
- 加盟學員簽約合同范本
- 買土地合同范本
- 加油站聘用站長合同范本
- 借款項目合同范本
- 汽車運行材料ppt課件(完整版)
- 四年級數(shù)學下冊教案-練習一-北師大版
- GB∕T 1732-2020 漆膜耐沖擊測定法
- 2022《化工裝置安全試車工作規(guī)范》精選ppt課件
- Q∕GDW 12067-2020 高壓電纜及通道防火技術規(guī)范
- 汽車系統(tǒng)動力學-輪胎動力學
- 《經濟研究方法論》課程教學大綱
- 10T每天生活污水處理設計方案
- 中國民航國內航空匯編航路314系列航線
- 山西特色文化簡介(課堂PPT)
- 一元二次方程100道計算題練習(附答案)
評論
0/150
提交評論