java實現(xiàn)聊天系統(tǒng)(計算機網(wǎng)絡(luò)課程設(shè)計報告)_第1頁
java實現(xiàn)聊天系統(tǒng)(計算機網(wǎng)絡(luò)課程設(shè)計報告)_第2頁
java實現(xiàn)聊天系統(tǒng)(計算機網(wǎng)絡(luò)課程設(shè)計報告)_第3頁
java實現(xiàn)聊天系統(tǒng)(計算機網(wǎng)絡(luò)課程設(shè)計報告)_第4頁
java實現(xiàn)聊天系統(tǒng)(計算機網(wǎng)絡(luò)課程設(shè)計報告)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機網(wǎng)絡(luò)課程設(shè)計報告 學(xué)生姓名 學(xué) 號 班 級 指導(dǎo)教師 設(shè)計時間 目錄第一章 系統(tǒng)描述1.1設(shè)計目的31.2系統(tǒng)設(shè)計任務(wù) 31.3系統(tǒng)設(shè)計分析31.4系統(tǒng)功能分析4第二章 功能模塊結(jié)構(gòu)2.1模塊劃分52.2模塊結(jié)構(gòu)圖52.1模塊功能5第三章 模塊算法實現(xiàn)3.1 服務(wù)器實現(xiàn)63.2 客戶端實現(xiàn)9第四章 運行結(jié)果13第五章 課程設(shè)計總結(jié)17第六章 附錄6.1 參考文獻196.2 源代碼19第一章 系統(tǒng)描述1.1設(shè)計目的1學(xué)習(xí)網(wǎng)絡(luò)編程的知識,掌握網(wǎng)絡(luò)編程的方法。2進一步掌握編程思想與編程技巧,做到模塊化程序設(shè)計,3. 強化語言學(xué)習(xí),尤其是Java的圖形界面與多線程,需反復(fù)練習(xí),熟練掌握。1.2系統(tǒng)設(shè)計任務(wù)聊天室軟件的設(shè)計與開發(fā):基本要求可以完成群聊、私人聊天,實時發(fā)送和顯示聊天信息,完成好友列表;進一步要求帶表情,附件發(fā)送,聊天信息的加密傳送,設(shè)置黑名單等。學(xué)習(xí)通信編程Socket接口編程,使用TCP或UDP接口完成信息傳送,利用多線程技術(shù)實現(xiàn)服務(wù)器端的多個TCP連接的建立。1.3系統(tǒng)設(shè)計分析一實現(xiàn)網(wǎng)絡(luò)聊天室編程,關(guān)鍵在于Socket通信,程序的功能都是在Socket的基礎(chǔ)上一層一層增加的。實現(xiàn)Socket通信的基本方法為以下4個步驟。(1) 在客戶端與服務(wù)器端創(chuàng)建相應(yīng)的ServerSockot/Socket實例。(2) 打開連接到Socket的輸入輸出流(3) 利用輸入輸出流,按照一定的協(xié)議(TCP協(xié)議)對Socket進行讀寫操作(4) 關(guān)閉輸入輸出流和Socket我們要實現(xiàn)的功能都是在第3步對Socket的輸入輸出流做相應(yīng)的操作ServerSocket(port)Socket socket= ServerSocket.accept() 接收連接CloseOutputStream InputStreamServer通信過程Socket(host,port)與服務(wù)器建立連接CloseOutputStream InputStreamClient二 因為是多客戶端,所以必須用線程進行控制,不同的處理線程為不同的客戶服務(wù),主線程只負責(zé)循環(huán)等待,處理線程負責(zé)網(wǎng)絡(luò)連接,接受客戶輸入的信息,再做相應(yīng)的處理。1.4系統(tǒng)功能分析本系統(tǒng)可以通過網(wǎng)絡(luò)進行聊天,采用客戶端服務(wù)器模式,所以程序簡介清晰易懂,而且用戶都是在客戶端進行活動,方便對用戶的管理,也使得程序運行與差錯簡單起來。采用了多線程技術(shù),可以做到多人同時在線,提高了系統(tǒng)的性能,增強了系統(tǒng)的實用性。有簡單的客戶端界面,方便用戶使用。采用的是TCP協(xié)議,這是可靠的,穩(wěn)定的協(xié)議,這樣不會丟失任何包,也就不會丟失任何信息。本系統(tǒng)實現(xiàn)的功能有:1. 用戶名字登錄2. 用戶之間的群聊3. 用戶之間的私聊4. 動態(tài)刷新并顯示好友列表5. 顯示在線人數(shù)6. 服務(wù)器可以顯示用戶在線狀態(tài)7. 能夠退出處理8. 用戶上下線提醒第二章 功能模塊結(jié)構(gòu)2.1 模塊劃分 服務(wù)器: Server類模塊,ServerHanderson模塊,sendallclient模塊,sendclientlist模塊客戶端:Client類模塊, ServiceFrame窗口界面模塊ServerHander模塊2.2 模塊結(jié)構(gòu)圖ServerHander模塊Server模塊ServerHander模塊通信過程建立連接ServiceFrame模塊Client模塊2.3 模塊功能服務(wù)器:1. Server類模塊:與客戶端建立連接,通過套接字獲得名字,在控制端顯示提示信息2. ServerHander模塊:提供線程管理,實現(xiàn)多用戶的管理。針對每一個用戶發(fā)過來的消息,進行相應(yīng)處理,再轉(zhuǎn)發(fā)給客戶。3. Sendallclient模塊:給每個用戶發(fā)送消息。4. Sendclientlist模塊:每當(dāng)有用戶上線,更新每個用戶的用戶列表??蛻舳耍?. Client類模塊:與服務(wù)端建立連接,用戶登錄,實現(xiàn)消息的群聊,私聊,用戶列表的更新等功能。2. ServiceFrame窗口界面模塊:客戶端窗口界面,實現(xiàn)用戶友好,方便用戶使用,在窗口上有消息顯示,用戶列表,在線人數(shù)等視圖信息。第三章 模塊算法實現(xiàn)3.1 服務(wù)器實現(xiàn) 1. Server類模塊:創(chuàng)建ServerSocket,在指定端口監(jiān)聽,當(dāng)有用戶登錄,接受套接字輸入流,顯示其登錄信息,調(diào)用ServerHander線程進行管理。public Server(int port) throws IOExceptionServerSocket server=new ServerSocket(port);while(true)Socket conn=server.accept(); /接收客戶端套接字DataInputStream in =new DataInputStream(conn.getInputStream();String who=in.readUTF();System.out.print(Client+(ip:+conn.getInetAddress()+)+who+ 進入!+n); ServerHander cn=new ServerHander(who,conn);cn.start();2. Sendallclient模塊: 把msg消息發(fā)送給每一個用戶。其中allclients是ServerHander的枚舉類型,可以指向每一個用戶。protected static void sendallclient(String msg) synchronized (clientlist)Enumeration allclients=clientlist.elements();while(allclients.hasMoreElements()ServerHander serh=(ServerHander)allclients.nextElement();tryserh.out.writeUTF(msg);serh.out.flush();catch(IOException exc)errupt();3.Sendclientlist模塊:更新用戶列表,當(dāng)有新用戶上線時,對以前的用戶的好友列表,加上這個新用戶名字,對于這個新用戶,加上所有用戶的名字。實現(xiàn)方法是在名字信息后面加上“$”關(guān)鍵字,這樣客戶端接收到這個關(guān)鍵字時,做相應(yīng)處理。public static synchronized void sendclientlist()for(int j=0;jclientlist.size();j+)ServerHander allclients1=clientlist.elementAt(j); if(j=clientlist.size()-1) /若是新增用戶,把vector中的所有用戶都發(fā)送過去 for(int i = 0;iclientlist.size();i+) ServerHander allclients2=clientlist.elementAt(i); try allclients1.out.writeUTF(allclients2.who+$); allclients1.out.flush(); catch(IOException exc) errupt(); else /老用戶,只增加新來的用戶 ServerHander allclients3=clientlist.lastElement(); try allclients1.out.writeUTF(allclients3.who+$); allclients1.out.flush(); catch(IOException exc) errupt(); 4.ServerHander模塊: 關(guān)鍵模塊,與客戶端進行消息的交互,相互加關(guān)鍵字,解密關(guān)鍵字,做到上下線提醒,群聊,私聊等功能。創(chuàng)建ServerHander的Vector對象,可以方便用戶管理,Vector對象是可變數(shù)組,而且支持線程同步,適合在網(wǎng)絡(luò)編程中使用。對用戶發(fā)送過來的消息通過關(guān)鍵字進行解析,前面的字符串為發(fā)送的消息,后面的字符串為發(fā)送對象,若發(fā)送給所有人,則直接發(fā)送,若發(fā)送給某個人,則在發(fā)送的消息后面再加上關(guān)鍵字,讓客戶端去解析。有用戶下線,發(fā)送下線消息,通過下線關(guān)鍵字,可以在客戶端更新用戶列表。class ServerHander extends ThreadSocket socket;DataInputStream in;DataOutputStream out;String who;protected static Vectorclientlist=new Vector() ; /把用戶線程放入可變對象數(shù)組public ServerHander(String name,Socket socket) throws IOExceptionthis.who = name;this.socket = socket;in =new DataInputStream(new BufferedInputStream(socket.getInputStream();out =new DataOutputStream(new BufferedOutputStream(socket.getOutputStream();public void run()try clientlist.addElement(this); /VECTOR中增加新線程 sendallclient(who+ 上線); sendclientlist(); /為每一個客戶端更新在線用戶 while(true) String msg=in.readUTF(); int index = msg.lastIndexOf(); /對客戶端發(fā)過來的信息做相應(yīng)的處理 String str = msg.substring(index+1,msg.length(); /取得發(fā)送對象和發(fā)送的消息 msg=msg.substring(0,index); if(str.equals(所有人)=false) sendallclient(who+ 對+str+ 說: +msg+); /不是發(fā)給所有人則增添標記 else sendallclient(who+ 對所有人 說: +msg); catch(IOException e)System.out.println(error);finallyclientlist.removeElement(this);System.out.print(Client +(ip:+socket.getInetAddress()+)+who+ 退出!+n);sendallclient(who+ 下線);trysocket.close();catch(IOException ex)System.out.println(clsing);3.2 客戶端實現(xiàn) 1.ServerFrame窗口界面模塊:有一個消息顯示文本區(qū)域,消息發(fā)送框,發(fā)送按鈕,好友列表下拉框,一條標簽用來顯示在線人數(shù),文本區(qū)域添加在JscrollPane上,這樣,無論消息有多長,多寬,都能顯示出來,如果沒添加的話,消息一多,就顯示不出了,這個小細節(jié),很多人都沒注意。class ServiceFrame extends Frame JTextArea showAT; JTextField sendFD; JComboBox friendlist; JButton but; JLabel showCount; JScrollPane textAreaScrollPane; JPanel textFieldPanel = new JPanel(); public ServiceFrame (String winname)super(winname); /繼承父類的名字setSize(500,400);textFieldPanel.setLayout(new FlowLayout(0,10,10);showAT = new JTextArea(400,400);showAT.setEditable(false);textAreaScrollPane = new JScrollPane(showAT);add(textAreaScrollPane, BorderLayout.CENTER);add(textFieldPanel, BorderLayout.SOUTH);friendlist = new JComboBox();friendlist.addItem(所有人);textFieldPanel.add(friendlist);sendFD = new JTextField(20);textFieldPanel.add(sendFD);but = new JButton(發(fā)送);but.setMnemonic(KeyEvent.VK_ENTER);textFieldPanel.add(but);showCount = new JLabel(在線人數(shù):1);textFieldPanel.add(showCount); show();按鈕監(jiān)聽事件:當(dāng)按下按鈕,把發(fā)送文本框的消息再加上當(dāng)前選擇的發(fā)送對象寫入輸出流,中間用關(guān)鍵字隔開,在服務(wù)端方便解析。class ActListener implements ActionListener Client client; ServiceFrame sframe; public ActListener(Client c,ServiceFrame sf) client=c; sframe=sf; public void actionPerformed(ActionEvent e) /發(fā)送信息,并以作為私聊標記client.send(sframe.sendFD.getText().trim()+sframe.friendlist.getSelectedItem(); sframe.sendFD.setText( ); 退出事件:添加退出功能,不然直接點叉叉退出,會報錯。class ExitListener extends WindowAdapterClient client;public ExitListener(Client c) client=c; public void windowClosing(WindowEvent e)client.close();System.exit(0);2.Client類模塊:關(guān)鍵模塊,通過服務(wù)器IP地址與端口建立連接,在控制臺輸入名字,發(fā)送給服務(wù)器,服務(wù)器會進行上線提醒與更新用戶列表的操作。public class Client public ServiceFrame sf; private Socket csocket; private DataInputStream in; private DataOutputStream out; public static void main(String args) BufferedReader in = new BufferedReader(new InputStreamReader(System.in); System.out.println(請輸入一個名字: ); String who= ; try who=in.readLine().trim(); /控制臺獲得名字 catch(IOException e) e.printStackTrace(); new Client(who,,9992); 在Client的構(gòu)造函數(shù)中實現(xiàn)對服務(wù)器消息的解析,接受消息str11. 若str1以$結(jié)尾,說明是有用戶上線,在所有用戶消息區(qū)域顯示該消息,并且更新每一個用戶的好友列表。2. 若str1以結(jié)尾,說明這是一條私聊消息,解析其中的名字信息,若該用戶的名字在里面,才顯示該消息。3. 若str1以下線結(jié)尾,說明有用戶下線,在所有用戶消息區(qū)域顯示該消息,并在所有用戶的用戶列表中刪除該用戶的信息最后,顯示當(dāng)前在線人數(shù)。public Client(String who,String server,int port) sf=new ServiceFrame(who+ 的客戶端); String str1 = null; sf.but.addActionListener(new ActListener(this,sf); sf.addWindowListener(new ExitListener(this); try csocket =new Socket(server,port); in=new DataInputStream(new BufferedInputStream(csocket.getInputStream(); out=new DataOutputStream(new BufferedOutputStream(csocket.getOutputStream(); out.writeUTF(who); out.flush(); /名字發(fā)給服務(wù)器 while(true) str1 = in.readUTF(); /重點!,服務(wù)器端發(fā)來的消息 if(str1.endsWith($) /若以$結(jié)尾,則增添用戶 int index = str1.lastIndexOf($); String str2 = str1.substring(0,index); sf.friendlist.addItem(str2.trim(); else if(str1.endsWith() /以結(jié)尾為私聊信息 str1=str1.substring(0,str1.length()-1); if(str1.contains(who) sf.showAT.append(- +str1+n); else if(str1.endsWith(下線) /用戶下線,刪除此用戶 int index = str1.lastIndexOf(下線); String str2 = str1.substring(0,index); sf.friendlist.removeItem(str2.trim(); sf.showAT.append(- +str1+n); sf.showCount.setText(在線人數(shù):+(sf.friendlist.getItemCount()-1); /動態(tài)更新在線人數(shù) catch(Exception e) System.out.println(Server Error); this.close(); System.exit(0); 第四章 運行結(jié)果1.服務(wù)器控制臺顯示并記錄登錄,退出信息。2.在客戶端控制臺輸入名字進入聊天室。 3.聊天界面顯示客戶端名字,好友列表,在線人數(shù)等信息。4.私聊,群聊顯示,若選擇所有人則為群聊,選擇某一個人,則為私聊。如下圖,群聊消息,在所有客戶端都顯示,私聊信息只會在發(fā)送者與接受者中顯示。 5.人數(shù)動態(tài)刷新。 第五章 課程設(shè)計總結(jié)從收到題目的茫然無措,不知從何下手,到最后交出的成果,真的讓我學(xué)到了很多,可能比一學(xué)期的JAVA和網(wǎng)絡(luò)課程設(shè)計中學(xué)到的關(guān)于TCP協(xié)議的知識還要多,所以很感謝這次課程設(shè)計,有效果也很有意義,某種程度上比上課效果還好。說說完成課程設(shè)計的整個過程吧。剛看到可以選擇的六個題目時,猶如晴天霹靂,別說用代碼實現(xiàn)了,連題目要求都不理解,上課恍惚聽老師提到過這個知識點,可是重要的內(nèi)容卻一點也不知道,而且,由于要做圖形界面,所以用JAVA會更簡單點,但JAVA也忘得差不多了,所以只能從頭來過,剛開始的3周,一點有關(guān)課程設(shè)計的代碼都沒寫,拿著一本從零開始學(xué)JAVA把JAVA基礎(chǔ)知識,尤其是關(guān)于網(wǎng)絡(luò)編程,線程,圖形界面的知識,狠狠地補了一把,終于更看懂一些程序結(jié)構(gòu)清晰,沒有反射,泛型等高端用法的程序了。在這過程中發(fā)現(xiàn),做一個普通的網(wǎng)絡(luò)聊天室,似乎不要用太多網(wǎng)絡(luò)知識,懂得Socokt和TCP的使用即可,于是開始慢慢敲代碼了。先把服務(wù)器與客戶端搭建起來,只能實現(xiàn)連接上的作用,但什么功能都沒有,那時,以為能連接上了,那實現(xiàn)一些私聊,群聊的功能應(yīng)該很簡單,但現(xiàn)實確是,只能腦中想象,真的用代碼實現(xiàn),卻總是錯誤百出,做的心灰意冷,尤其是私聊功能的實現(xiàn),剛開始,想讓服務(wù)器直接向接受者與發(fā)送者發(fā)送消息,但總是不如人意,折騰了大概一星期,才意識到TCP協(xié)議就是用自己定義的一些規(guī)則,在服務(wù)器與客戶端之間傳遞消息,可以添加關(guān)鍵字,再解析。于是才解決私聊問題,然后添加好友列表與更新好友的功能也在跌跌撞撞中實現(xiàn)了。窗口的布局,剛開始想用網(wǎng)格包布局,但用的很不熟練,導(dǎo)致布局不理想,無奈,只能用最基本的布局了,所以界面看上去很普通。想發(fā)送圖片,卻發(fā)現(xiàn)文本區(qū)域根本不能顯示圖片,能用JEditorPane實現(xiàn),但有BUG,不知如何調(diào)試,書上,網(wǎng)上也沒找到能解決的辦法,只能放棄了。 課程設(shè)計在這種不斷學(xué)習(xí)與摸索中差不多完成了,說說這次課程設(shè)計的不足吧。1. 學(xué)過的知識不牢固,所以花費了大量時間用來學(xué)習(xí)基礎(chǔ)知識,那些應(yīng)該在以前就掌握的。2. 程序界面很普通,像老師說的一樣,是最最古老的聊天系統(tǒng),沒有什么花哨。3. 沒能實現(xiàn)附加功能,像加密傳輸,文件傳送等功能。其實,挺遺憾的,因為以前選修過密碼學(xué),應(yīng)該能夠?qū)崿F(xiàn)簡單的DES加密的。4. 沒有用到JDBC,把用戶信息存儲到數(shù)據(jù)庫表中,實行賬號密碼登錄,提高系統(tǒng)的安全性。做了這么多的課程設(shè)計,最大的體會就是用心去做,用心去學(xué),你一定能學(xué)到很多知識,而且這是對學(xué)過的知識的應(yīng)用,所以比單一的上課更有意思。對于自己能獨立的完成課程設(shè)計,還是頗為滿意的,至少努力沒有白費,學(xué)到的知識也非常多,最重要的應(yīng)該是理解了TCP協(xié)議的原理,并學(xué)會了簡單的應(yīng)用,JAVA編程水平得到了一定的提高,面向?qū)ο蟮乃枷氡纫酝逦?。第六?附錄6.1參考文獻從零開始學(xué)JAVA 王發(fā)波 中國鐵道出版社Java 2實用教程 耿祥文 清華大學(xué)出版社6.2源代碼服務(wù)器代碼:package service;import java.io.*;import java.util.*;import .*;public class Server public Server(int port) throws IOExceptionServerSocket server=new ServerSocket(port);while(true)Socket conn=server.accept(); /建立客戶端套接字DataInputStream in =new DataInputStream(conn.getInputStream();String who=in.readUTF();System.out.print(Client +(ip:+conn.getInetAddress()+)+who+ 進入!+n);ServerHander cn=new ServerHander(who,conn);cn.start();public static void main(String args)throws IOExceptionnew Server(9992);class ServerHander extends ThreadSocket socket;DataInputStream in;DataOutputStream out;String who;protected static Vectorclientlist=new Vector() ; /把用戶線程放入可變對象數(shù)組public ServerHander(String name,Socket socket) throws IOExceptionthis.who = name;this.socket = socket;in =new DataInputStream(new BufferedInputStream(socket.getInputStream();out =new DataOutputStream(new BufferedOutputStream(socket.getOutputStream();public void run()try clientlist.addElement(this); /VECTOR中增加新線程 sendallclient(who+ 上線); sendclientlist(); /為每一個客戶端更新在線用戶 while(true) String msg=in.readUTF(); int index = msg.lastIndexOf(); /對客戶端發(fā)過來的信息做相應(yīng)的處理 String str = msg.substring(index+1,msg.length(); /取得發(fā)送對象和發(fā)送的消息 msg=msg.substring(0,index); if(str.equals(所有人)=false) sendallclient(who+ 對+str+ 說: +msg+); /不是發(fā)給所有人則增添標記 else sendallclient(who+ 對所有人 說: +msg); catch(IOException e)System.out.println(error);finallyclientlist.removeElement(this);System.out.print(Client +(ip:+socket.getInetAddress()+)+who+ 退出!+n);sendallclient(who+ 下線);trysocket.close();catch(IOException ex)System.out.println(clsing);/發(fā)送消息給所有用戶protected static void sendallclient(String msg) synchronized (clientlist)Enumeration allclients=clientlist.elements();while(allclients.hasMoreElements()ServerHander serh=(ServerHander)allclients.nextElement();tryserh.out.writeUTF(msg);serh.out.flush();catch(IOException exc)errupt();/更新用戶列表public static synchronized void sendclientlist()for(int j=0;jclientlist.size();j+)ServerHander allclients1=clientlist.elementAt(j); if(j=clientlist.size()-1) /若是新增用戶,把vector中的所有用戶都發(fā)送過去 for(int i = 0;iclientlist.size();i+) ServerHander allclients2=clientlist.elementAt(i); try allclients1.out.writeUTF(allclients2.who+$); allclients1.out.flush(); catch(IOException exc) errupt(); else /老用戶,只增加新來的用戶 ServerHander allclients3=clientlist.lastElement(); try allclients1.out.writeUTF(allclients3.who+$); allclients1.out.flush(); catch(IOException exc) errupt(); 客戶端代碼:package service;import java.io.*;import .*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Client public ServiceFrame sf; private Socket csocket; private DataInputStream in; private DataOutputStream out; public static void main(String args) BufferedReader in = new BufferedReader(new InputStreamReader(System.in); System.out.println(請輸入一個名字: ); String who= ; try who=in.readLine().trim(); /控制臺獲得名字 catch(IOException e) e.printStackTrace(); new Client(who,,9992); public Client(String who,String server,int port) sf=new ServiceFrame(who+ 的客戶端); String str1 = null; sf.but.addActionListener(new ActListener(this,sf); sf.addWindowListener(new ExitListener(this); try csocket =new Socket(server,port); in=new DataInputStream(new BufferedInputStream(csocket.getInputStream(); out=new DataOutputStream(new BufferedOutputStream(csocket.getOutputStream(); out.writeUTF(who); out.flush(); /名字發(fā)給服務(wù)器 while(true) str1 = in.readUTF(); /重點!,服務(wù)器端發(fā)來的消息 if(str1.endsWith($) /若以$結(jié)尾,則增添用戶 int index = str1.lastIndexOf($); String str2 = str1.substring(0,index); sf.friendlist.addItem(str2.trim(); else if(str1.endsWith() /以結(jié)尾為私聊信息 str1=str1.substring(0,str1.length()-1); if(str1.contai

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論