![網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐《java聊天系統(tǒng)》_第1頁](http://file4.renrendoc.com/view/1501d44ea7b42a084cb065c1e85f4e8e/1501d44ea7b42a084cb065c1e85f4e8e1.gif)
![網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐《java聊天系統(tǒng)》_第2頁](http://file4.renrendoc.com/view/1501d44ea7b42a084cb065c1e85f4e8e/1501d44ea7b42a084cb065c1e85f4e8e2.gif)
![網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐《java聊天系統(tǒng)》_第3頁](http://file4.renrendoc.com/view/1501d44ea7b42a084cb065c1e85f4e8e/1501d44ea7b42a084cb065c1e85f4e8e3.gif)
![網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐《java聊天系統(tǒng)》_第4頁](http://file4.renrendoc.com/view/1501d44ea7b42a084cb065c1e85f4e8e/1501d44ea7b42a084cb065c1e85f4e8e4.gif)
![網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐《java聊天系統(tǒng)》_第5頁](http://file4.renrendoc.com/view/1501d44ea7b42a084cb065c1e85f4e8e/1501d44ea7b42a084cb065c1e85f4e8e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
個(gè)人資料整理 僅限學(xué)習(xí)使用學(xué)院網(wǎng)絡(luò)工程系網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐》——基于TCP的java及時(shí)聊天系統(tǒng)設(shè)計(jì)報(bào)告姓名:XXXXXXXX學(xué)號:XXXXXXXXXXXX班級:XXXXXXXXX指導(dǎo)老師: XXXXX完成時(shí)間: XXXXXXX基于TCP的java及時(shí)聊天系統(tǒng)摘要TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn)是近年來計(jì)算機(jī)網(wǎng)絡(luò)研究和應(yīng)用的熱點(diǎn)技術(shù) ,以它為基礎(chǔ)組建的INTERNET已成為目前國際上規(guī)模最大的計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)。在我國,TCP/IP也越來越受到廣泛關(guān)注,并得以多層次推廣。在TCP/IP的模型中,傳輸層有兩個(gè)并列的協(xié)議:TCP(TransportControlProtocol, 傳輸控制協(xié)議>和UDP(UserDatagramProtocol,用戶數(shù)據(jù)報(bào)協(xié)議>。TCP和UDP共存于一個(gè)網(wǎng)絡(luò)中,TCP是面向連接的,提供可靠性服務(wù),UDP是無連接的,提供高效率服務(wù)。高可靠性的TCP通常用于一次傳輸要交換大量報(bào)文的情形,比如文件傳輸、遠(yuǎn)程登錄等。高效率的UDP一般用于一次傳輸交換少量報(bào)文,尤其是交易型應(yīng)用,比如數(shù)據(jù)庫查詢的情形,其可靠性由應(yīng)用程序提供,因?yàn)榻粨Q次數(shù)不多,即便發(fā)生傳輸錯(cuò)誤,必須重傳,應(yīng)用程序也不會為此付出太大的代價(jià)。b5E2RGbCAP在網(wǎng)絡(luò)越來越發(fā)達(dá)的今天,人們對網(wǎng)絡(luò)的依賴越來越多 ,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來越多,網(wǎng)絡(luò)聊天時(shí)一類的聊天系統(tǒng)的發(fā)展日新月異。本java及時(shí)聊天系統(tǒng)即是一個(gè)使用套接字<socket)實(shí)現(xiàn)C/S<clientandserver)模式的TCP/IP協(xié)議下連接的及時(shí)通信系統(tǒng)。p1EanqFDPw1/33個(gè)人資料整理 僅限學(xué)習(xí)使用本論文主要分為六章:第一章引言,介紹本java及時(shí)聊天系統(tǒng)的需求分析,闡述了工程的開發(fā)背景、系統(tǒng)設(shè)計(jì)方法,明確了該設(shè)計(jì)的主要任務(wù)。第二章是系統(tǒng)的概要設(shè)計(jì),詳細(xì)描述了聊天系統(tǒng)的運(yùn)行環(huán)境,系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)以及設(shè)計(jì)實(shí)現(xiàn)的基本功能。第三章描述了使用MyEclipse完成系統(tǒng)架構(gòu)設(shè)計(jì),實(shí)現(xiàn)簡便切邏輯化的程序設(shè)計(jì)。第四章是系統(tǒng)的詳細(xì)設(shè)計(jì),詳細(xì)介紹了系統(tǒng)的結(jié)構(gòu)以及各個(gè)功能模塊的設(shè)計(jì)細(xì)節(jié)。第五章是對本java及時(shí)聊天系統(tǒng)的測試結(jié)果報(bào)告,主要針對系統(tǒng)各功能模塊進(jìn)行細(xì)節(jié)測試。最后是本次網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐的總結(jié)及體會。 DXDiTa9E3d關(guān)鍵詞:java;TCP/IP;C/S;MyEclipse;及時(shí)通信abstractTCP/IPnetworksystemstructureandprotocolstandardsinrecentyearsistostudyandapplicationofcomputernetworkbyitshotspottechnologiesbasedINTERNEThasbecomeacurrentinternational'slargestcomputernetworksystem.Inourcountry,theTCP/IPisalsomoreandmoreattention,andtomulti-levelpromotion.OnTCP/IPmodel,theTransportlayerhastwoparatacticagreement:TransportControlProtocol(TCP,TCPandUDP(UserDatagram>Protocol,UserdatareportedProtocol>.TCPandUDPcoexistinanetwork,theTCPisconnection-oriented,providereliabilityservice,UDPisnoconnection,withefficientservice.HighreliabilityoftheTCPnormallyusedforatransmissionofmessagestoexchangethesituation,suchasfiletransfer,remotelogin,etc.。EfficientUDPgeneralforatransmissionmessage,especiallyforsmallamounts,suchastransactionaldatabasequeryapplicationsituation,itsreliabilitybyapplicationsprovide,becausefew,evenhappenexchangefrequencytransmissionerror,necessitatingretransmission,applicationsalsowon'tpaythetoobigpriceRTCrpUDGiT.Innetworkismoreandmoredevelopedtoday,peopledependingontheInternet,moreandmoretiedtotheInternet,whichproducesmorechattingtools,onlinechatchattingsystemwhenthedevelopmentofaday.TheJavatimelychatsystemisausesocket(socket>toimplementC/S(andserver>modeareundertheTCP/IPprotocolconnecttimelycommunicationsystem.5PCzVD7HxAThisthesismainlydividedintosixchapters:thefirstchapterpreface,introducetheJavachatsystemtimelyrequirementanalysis,expoundsthedevelopmentbackground,systemprojectdesignmethods,clearthedesignofthemaintask.Thesecondchapterissystem2/33個(gè)人資料整理 僅限學(xué)習(xí)使用ofgeneraldesign,describesthedetailedchattheoperationofthesystemenvironment,systemdesignandimplementationofstructuraldesignandbasicfunction.ThethirdchapterdescribesMyEclipsecompleteuseofsystemarchitecturedesign,realizationofsimplecutlogicprogramming.Thefourthchapterissystemofthedetaileddesign,detailedintroductionofsystemstructureandmodulesdesigndetails.ThefifthchapterisillustrativeoftheJavatimelychatsystemstestresultsreport,thefunctionmodulemainlyaimedatthesystemdetailtest.ThelastisthenetworkapplicationdevelopmentandcomprehensivethesummaryofpracticeandexperiencejLBHrnAILg.Keywords:Java。TCP/IP。C/S。MyEclipse。TimelycommunicationxHAQX74J0X目 錄摘要1LDAYtRyKfEabstract 2Zzz6ZB2Ltk一. 引言4dvzfvkwMI11.1背景4rqyn14ZNXI1.2需求分析4EmxvxOtOco二.系統(tǒng)設(shè)計(jì)5SixE2yXPq52.1功能概述56ewMyirQFL2.2運(yùn)行環(huán)境5kavU42VRUs三.2.3系統(tǒng)結(jié)構(gòu)5y6v3ALoS89系統(tǒng)架構(gòu)設(shè)計(jì)6M2ub6vSTnP3.1整體設(shè)計(jì)60YujCfmUCw3.2服務(wù)器端設(shè)計(jì)6eUts8ZQVRd3.3客戶端設(shè)計(jì)6sQsAEJkW5T四.詳細(xì)設(shè)計(jì)7GMsIasNXkA4.1聊天室服務(wù)器端設(shè)計(jì)7TIrRGchYzg4.1.1server.java77EqZcWLZNX4.1.2ServerListen.java12lzq7IGf02E4.1.3ServerReceive.java14zvpgeqJ1hk4.1.4PorConf.java16NrpoJac3v14.1.5Node.java181nowfTG4KI4.1.6UserLinkList.java18fjnFLDa5Zo4.1.7Help.java20tfnNhnE6e54.2聊天室客戶端設(shè)計(jì)21HbmVN777sL4.2.1client.java21V7l4jRB8Hs4.2.2ClientReceive.java2683lcPA59W94.2.3ConnectConf.java27mZkklkzaaP4.2.4UserConf.java28AVktR43bpw五.測試報(bào)告29ORjBnOwcEd5.1系統(tǒng)界面預(yù)覽302MiJTy0dTT5.2測試過程30gIiSpiue7A5.2.1服務(wù)器端端口設(shè)置及偵聽功能30uEh0U1Yfmh5.2.2客戶端連接功能30IAg9qLsgBX5.2.2用戶信息設(shè)置功能30WwghWvVhPE3/33個(gè)人資料整理 僅限學(xué)習(xí)使用5.2.3 用戶登錄/注銷功能 30asfpsfpi4k5.2.4 聊天通信功能 31ooeyYZTjj15.2.5 幫助服務(wù)功能 32BkeGuInkxI六.總結(jié)及體會 32PgdO0sRlMo七.參考文獻(xiàn) 333cdXwckm15一.引言1.1背景在網(wǎng)絡(luò)越來越發(fā)達(dá)的今天,人們對網(wǎng)絡(luò)的依賴越來越多,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來越多,類似飛鴿等一類的聊天、文件傳送系統(tǒng)的發(fā)展日新月異,應(yīng)2018——2018學(xué)年第二學(xué)期《網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐》課程要求,我選擇制作一個(gè)局域網(wǎng)的網(wǎng)絡(luò)聊天工具作為本次的綜合實(shí)踐課程;以求通過制作該系統(tǒng)能更好的學(xué)習(xí)網(wǎng)絡(luò)編程及應(yīng)用開發(fā)。h8c52WOngM本次選題為“基于 TCP的java聊天系統(tǒng)”的目的就是指直接或間接地通過網(wǎng)絡(luò)協(xié)議與其他計(jì)算機(jī)進(jìn)行通訊。網(wǎng)絡(luò)編程中有兩個(gè)主要的問題,一個(gè)是如何準(zhǔn)確的定位網(wǎng)絡(luò)上一臺或多臺主機(jī),另一個(gè)就是找到主機(jī)后如何可靠高效的進(jìn)行數(shù)據(jù)傳輸。在TCP/IP協(xié)議中IP層主要負(fù)責(zé)網(wǎng)絡(luò)主機(jī)的定位,數(shù)據(jù)傳輸?shù)穆酚?,?IP地址可以唯一地確定 Internet上的一臺主機(jī)。而 TCP層則提供面向應(yīng)用的可靠的或非可靠的數(shù)據(jù)傳輸機(jī)制,這是網(wǎng)絡(luò)編程的主要對象,一般不需要關(guān)心IP層是如何處理數(shù)據(jù)的。目前較為流行的網(wǎng)絡(luò)編程模型是客戶機(jī)/服務(wù)器<C/S)結(jié)構(gòu)。即通信雙方一方作為服務(wù)器等待客戶提出請求并予以響應(yīng)??蛻魟t在需要服務(wù)時(shí)向服務(wù)器提出申請。服務(wù)器一般作為守護(hù)進(jìn)程始終運(yùn)行,監(jiān)聽網(wǎng)絡(luò)端口,一旦有客戶請求,就會啟動一個(gè)服務(wù)進(jìn)程來響應(yīng)該客戶,同時(shí)自己繼續(xù)監(jiān)聽服務(wù)端口,使后來的客戶也能及時(shí)得到服務(wù)。v4bdyGious1.2需求分析本基于TCP的java聊天系統(tǒng)具體目的是通過網(wǎng)絡(luò)協(xié)議與其他計(jì)算機(jī)進(jìn)行通訊。主要實(shí)現(xiàn)如下需求目的:登錄 /注銷、實(shí)時(shí)聊天、狀態(tài)顯示、幫助操作等。J0bm4qMpJ9作為當(dāng)今最流行的及時(shí)通信工具,騰訊 QQ、MSN等軟件具有強(qiáng)大的聊天、文件傳輸、圖片保存、遠(yuǎn)程協(xié)助等功能,在日常的生活工作中對人與人之間通信幫助巨大,在一定程度上甚至已經(jīng)取代傳統(tǒng)的信件通信。本次的網(wǎng)絡(luò)應(yīng)用開發(fā)綜合實(shí)踐我4/33個(gè)人資料整理 僅限學(xué)習(xí)使用就是以通信中最基本的聊天消息收發(fā)方式設(shè)計(jì)一個(gè)基于TCP的java及時(shí)聊天系統(tǒng),由于能力有限,所以把一些要求較高的功能刪除了,只留下了聊天這一簡單的通信功能。此簡單及時(shí)聊天通信系統(tǒng)通過java語言編寫,提供給用戶基本的純文本消息收發(fā)功能,能夠通過C/S結(jié)構(gòu)實(shí)現(xiàn)消息的轉(zhuǎn)發(fā)和接收。XVauA9grYP二.系統(tǒng)設(shè)計(jì)2.1功能概述本java即時(shí)聊天系統(tǒng)是一個(gè)基于TCP的、由java語言編寫的典型應(yīng)用程序,它運(yùn)用目前較為流行的網(wǎng)絡(luò)編程模型是客戶機(jī)/服務(wù)器<C/S)結(jié)構(gòu),實(shí)現(xiàn)通信雙方一方作為服務(wù)器等待客戶提出請求并予以響應(yīng)??蛻魟t在需要服務(wù)時(shí)向服務(wù)器提出申請。服務(wù)器一般作為守護(hù)進(jìn)程始終運(yùn)行,監(jiān)聽網(wǎng)絡(luò)端口,一旦有客戶請求,就會啟動一個(gè)服務(wù)進(jìn)程來響應(yīng)該客戶,同時(shí)自己繼續(xù)監(jiān)聽服務(wù)端口,使后來的客戶也能及時(shí)得到服務(wù),其系統(tǒng)主要功能概述如下:bR9C6TJscw(1>登錄/注銷功能:在服務(wù)器端啟動服務(wù)開始偵聽后,客戶端可以登錄聊天系統(tǒng)進(jìn)行及時(shí)聊天;或者結(jié)束聊天注銷登錄。pN9LBDdtrd(2>聊天功能:客戶可以通過服務(wù)器轉(zhuǎn)發(fā)消息 ,實(shí)現(xiàn)一對一和多對多聊天。(3>設(shè)置功能:客戶端可以在登錄前進(jìn)行基本信息設(shè)置功能。(4>顯示功能:客戶端程序應(yīng)該可以實(shí)時(shí)顯示目前所有客戶端用戶的狀態(tài)。2.2運(yùn)行環(huán)境硬件:PC機(jī)操作系統(tǒng):Windows2003/XP/Vista/7編譯環(huán)境:MyEclipse8.5+Tomcat6.0開發(fā)工具:MyEclipse8.5+Tomcat6.0編程語言:java2.3系統(tǒng)結(jié)構(gòu)Java聊天系統(tǒng)服務(wù)器端 客戶端圖2.3系統(tǒng)結(jié)構(gòu)端啟停用用用注用口動止戶私群戶戶銷戶私群設(shè)服服顯聊聊5/33設(shè)登登顯聊聊示置務(wù)務(wù)示置錄錄個(gè)人資料整理 僅限學(xué)習(xí)使用三.系統(tǒng)架構(gòu)設(shè)計(jì)3.1整體設(shè)計(jì)本java聊天系統(tǒng)在MyEclipse8.5設(shè)計(jì)時(shí)嚴(yán)格按照C/S結(jié)構(gòu)設(shè)計(jì),客戶端“client”及服務(wù)器端“server”分別實(shí)現(xiàn)需求分析中的目的,具體整體設(shè)計(jì)結(jié)構(gòu)如下圖所示:DJ8T7nHuGT圖3.1 系統(tǒng)整體架構(gòu)設(shè)計(jì)3.2服務(wù)器端設(shè)計(jì)JFrame ActionListener ThreadChatServerServerListen-port:publicstaticin-server:ServerSocket-serverSocket:ServerSocket-userLinkList:UserLinkList-messageShow:JTextArea-isStop:publicBoolean-userLinkList:UserLinkList圖3.2服+ServerListen(ServerSocket,JComboBox,J-showStatus:JTextFieldTextArea,JTextField,UserLinkList>+ChatServer(>:public務(wù)器端設(shè)ServerReceive+init(>:publicvoid計(jì)-textarea:JTextArea+startService(>:publicvoid-userLinkList:UserLinkList+stopService(>:publicvoid3.3客-isStop:publicBoolean+sendStopToAll(>:publicvoid+ServerListen(ServerSocket,JComboBox,J+sendMsgToAll(String>:publicvoid戶端設(shè)TextArea,JTextField,UserLinkList>+sendSystemMessage(>:publicvoid6/33個(gè)人資料整理 僅限學(xué)習(xí)使用計(jì)JFrame ActionListener ThreadChatClientClientReceive-port:publicstaticin圖3.2-socket:Socket-serverSocket:ServerSocket客-messageShow:JTextArea戶器端設(shè)-output:ObjectOutputStream-userLinkList:UserLinkList-input:ObjectInputStream-showStatus:JTextField計(jì)+ClientReceive(Socket,ObjectOutputStrea+ChatClient(>:publicm,ObjectInputStream,JComboBox,JTextA+init(>:publicvoid四.詳rea,JTextField>+Connect(>:publicvoid細(xì)設(shè)計(jì)+DisConnect(>:publicvoid+SendMessage(>:publicvoid本基于TCP的java及時(shí)聊天系統(tǒng)一共包含2個(gè)部分:server部分和client部分,分別實(shí)現(xiàn)服務(wù)器端功能和客戶端功能。QF81D7bvUA4.1聊天室服務(wù)器端設(shè)計(jì)聊天室服務(wù)端主要包括 7個(gè)文件,它們的功能如下:4.1.1server.javaserver.java 包含名為server的public 類,其主要功能為定義服務(wù)器端的界面,添加事件偵聽與事件處理。調(diào)用 ServerListen 類來實(shí)現(xiàn)服務(wù)端用戶上線與下線的偵聽,調(diào)用 ServerReceive類來實(shí)現(xiàn)服務(wù)器端的消息的收發(fā)。主要實(shí)現(xiàn)方法源代碼如下:4B7a9QFw9hpackageserver。importjava.awt.*。importjava.awt.event.*。importjavax.swing.*。importjavax.swing.event.*。.*。importjava.io.*。/**聊天服務(wù)端的主框架類*/publicclassserverextendsJFrameimplementsActionListener{ix6iFA8xoXpublicstaticintport=8888。//服務(wù)端的偵聽端口ServerSocketserverSocket。//服務(wù)端SocketImageicon。//程序圖標(biāo)JComboBoxcombobox。//選擇發(fā)送消息的接受者7/33個(gè)人資料整理 僅限學(xué)習(xí)使用JTextAreamessageShow。//服務(wù)端的信息顯示JScrollPanemessageScrollPane。//信息顯示的滾動條JTextFieldshowStatus。//顯示用戶連接狀態(tài)JLabelsendToLabel,messageLabel。JTextFieldsysMessage。//服務(wù)端消息的發(fā)送JButtonsysMessageButton。//服務(wù)端消息的發(fā)送按鈕UserLinkListuserLinkList。//用戶鏈表// 建立菜單欄JMenuBar jMenuBar = newJMenuBar(> 。建立菜單組JMenu serviceMenu = newJMenu( "服務(wù)(V>" >。//建立菜單項(xiàng)JMenuItemportItem=newJMenuItem("端口設(shè)置(P>">。JMenuItemstartItem=newJMenuItem("啟動服務(wù)(S>">。JMenuItemstopItem=newJMenuItem("停止服務(wù)(T>">。JMenuItemexitItem=newJMenuItem("退出(X>">。JMenuhelpMenu=newJMenu("幫助(H>">。JMenuItemhelpItem=newJMenuItem("幫助(H>">。//建立工具欄JToolBar toolBar = newJToolBar(> 。建立工具欄中的按鈕組件框架的大小/**服務(wù)端構(gòu)造函數(shù)*/public server(>{添加框架的關(guān)閉事件處理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE>。wt6qbkCyDEthis.pack(>。設(shè)置框架的大小this .setSize( faceSize >。設(shè)置運(yùn)行時(shí)窗口的位置this.setTitle("聊天室服務(wù)端">。//設(shè)置標(biāo)題/**}*程序初始化函數(shù)*/publicvoidinit(>{ContainercontentPane=getContentPane(>。contentPane.setLayout(newBorderLayout(>>。添加菜單欄初始化按鈕將按鈕添加到工具欄8/33個(gè)人資料整理 僅限學(xué)習(xí)使用stopServer .setEnabled( false >stopItem .setEnabled( false >portItem.addActionListener(this>startItem.addActionListener(this>stopItem.addActionListener(this>exitItem.addActionListener(this>helpItem.addActionListener(this>portSet.addActionListener(this>startServer.addActionListener(this>stopServer.addActionListener(this>exitButton.addActionListener(this>combobox=newJComboBox(>combobox.insertItemAt("",0>combobox.setSelectedIndex(0>messageShow=newJTextArea(>messageShow.setEditable(false>sysMessage.addActionListener(this>sysMessageButton.addActionListener(this>sendToLabel=newJLabel(":">messageLabel=newJLabel(":">downPanel=newJPanel(>girdBag=newGridBagLayout(>downPanel.setLayout(girdBag>girdBagCon=newGridBagConstraints(>JLabelnone=newJLabel("">girdBagCon=newGridBagConstraints(>girdBagCon=newGridBagConstraints(>girdBagCon=newGridBagConstraints(>girdBagCon=newGridBagConstraints(>girdBagCon=newGridBagConstraints(>girdBagCon=newGridBagConstraints(>this .addWindowListener(newWindowAdapter(>{publicvoid windowClosing(WindowEvente>{9/33個(gè)人資料整理 僅限學(xué)習(xí)使用stopService(> 。System. exit (0>。}}。}/**事件處理*/publicvoidactionPerformed(ActionEvente>{Objectobj=e.getSource(>。if(obj==startServer||obj==startItem>{//啟動服務(wù)端Kp5zH46zRkstartService(>。}elseif(obj==stopServer||obj==stopItem>{//停止服務(wù)端Yl4HdOAA61}elseif(obj==portSet||obj==portItem>{//端口設(shè)置ch4PJx4BlI調(diào)出端口設(shè)置的對話框PortConfportConf= newPortConf( this >。portConf.show(> 。}elseif (obj== exitButton ||obj== exitItem >{ // 退出程序qd3YfhxCzo}elseif (obj== helpItem >{ // 菜單欄中的幫助調(diào)出幫助對話框HelphelpDialog=newHelp(this>。helpDialog.show(>。}elseif(obj==sysMessage||obj==sysMessageButton>{//發(fā)送系統(tǒng)消息E836L11DO5sendSystemMessage(>。}/**}啟動服務(wù)端*/publicvoid startService(>{try {serverSocket = newServerSocket( port ,10> 。messageShow .append( "服務(wù)端已經(jīng)啟動,在 "+port +"端口偵聽...\n" >。}catch (Exceptione>{//System.out.println(e> 。}userLinkList = newUserLinkList(> 。listenThread = newServerListen( serverSocket ,combobox ,messageShow ,showStatus ,userLinkList >。S42ehLvE3MlistenThread .start(> 。10/33個(gè)人資料整理 僅限學(xué)習(xí)使用}/*** 關(guān)閉服務(wù)端*/publicvoid stopService(>{try {向所有人發(fā)送服務(wù)器關(guān)閉的消息}messageShow .append( "服務(wù)端已經(jīng)關(guān)閉 \n" >。combobox .removeAllItems(> 。combobox .addItem( "所有人">。}catch (Exceptione>{//System.out.println(e> 。}}/**向所有人發(fā)送服務(wù)器關(guān)閉的消息*/publicvoidsendStopToAll(>{intcount=userLinkList.getCount(>。//用戶總數(shù)inti=0。while(i<count>{Nodenode=userLinkList.findUser(i>。if(node==null>{i++。continue。try{}node.output.writeObject("服務(wù)關(guān)閉">。node.output.flush(>。}catch(Exceptione>{//System.out.println("$$$"+e>。}i++。}}/**向所有人發(fā)送消息*/publicvoidsendMsgToAll(Stringmsg>{intcount=userLinkList.getCount(>。//用戶總數(shù)inti=0。while(i<count>{Nodenode=userLinkList.findUser(i>。if(node==null>{i++。continue。try{}11/33個(gè)人資料整理 僅限學(xué)習(xí)使用node. output .writeObject( "系統(tǒng)信息">。node. output .flush(> 。node. output .writeObject(msg> 。node. output .flush(> 。}catch (Exceptione>{//System.out.println("@@@"+e> 。}i++ 。}sysMessage .setText( "">。}/*** 向客戶端用戶發(fā)送消息*/publicvoid sendSystemMessage(>{StringtoSomebody= combobox .getSelectedItem(>.toString(> 。501nNvZFisStringmessage= sysMessage .getText(>+ "\n" 。messageShow .append(message> 。向所有人發(fā)送消息if(toSomebody.equalsIgnoreCase("所有人">>{sendMsgToAll(message>。}else{//向某個(gè)用戶發(fā)送消息try{Nodenode=userLinkList.findUser(toSomebody>。node.output.writeObject("系統(tǒng)信息">。node.output.flush(>。node.output.writeObject(message>。node.output.flush(>。}catch(Exceptione>{//System.out.println("!!!"+e>。}sysMessage.setText("">。//將發(fā)送消息欄的消息清空}}publicstaticvoidmain(String[]args>{}serverapp=newserver(>。}4.1.2ServerListen.java該類實(shí)現(xiàn)服務(wù)端用戶上線與下線的偵聽。該類對用戶上線下線的偵聽是通過調(diào)用用戶鏈表類<UserLinkList )來實(shí)現(xiàn)的,當(dāng)用戶上線與下線情況發(fā)生變化時(shí),該類會對主類的界面進(jìn)行相應(yīng)的修改。主要實(shí)現(xiàn)方法源代碼如下: jW1viftGw9publicclass ServerListen extends Thread{12/33個(gè)人資料整理 僅限學(xué)習(xí)使用ServerSocket server 。JComboBox combobox 。JTextArea textarea 。JTextField textfield 。UserLinkList userLinkList 。// 用戶鏈表Node client 。ServerReceive recvThread 。publicboolean isStop 。/**聊天服務(wù)端的用戶上線于下線偵聽類*/publicServerListen(ServerSocketserver,JComboBoxcombobox,xS0DOYWHLPJTextAreatextarea,JTextFieldtextfield,UserLinkListuserLinkList>{LOZMkIqI0wthis.server=bobox=combobox。this.textarea=textarea。this.textfield=textfield。this.userLinkList=userLinkList。isStop=false。}publicvoidrun(>{while(!isStop&&!server.isClosed(>>{try{client=newNode(>。client.socket=server.accept(>。client.output=newObjectOutputStream(client.socket.getOutputStream(>>。ZKZUQsUJedclient.output.flush(>。client.input=newObjectInputStream(client.socket.getInputStream(>>。dGY2mcoKtTclient.username=(String>client.input.readObject(>。rCYbSWRLIA顯示提示信息combobox.addItem(client.username>。userLinkList.addUser(client>。textarea.append("用戶"+client.username+"上線"+"\n">。FyXjoFlMWhtextfield.setText("在線用戶"+userLinkList.getCount(>+"人\n">。TuWrUpPObXrecvThread=newServerReceive(textarea,textfield,combobox,client,userLinkList>。recvThread.start(>。catch(Exceptione>{}}}}}13/33個(gè)人資料整理 僅限學(xué)習(xí)使用4.1.3ServerReceive.java該類是實(shí)現(xiàn)服務(wù)器端的消息的收發(fā)的類。該類分別定義了向某用戶及所有人發(fā)送消息的方法,發(fā)送的消息會顯示在主界面類的界面上。主要實(shí)現(xiàn)方法源代碼如下:7qWAq9jPqE/**服務(wù)器收發(fā)消息的類*/publicclass ServerReceive extends Thread{JTextArea textarea 。JTextField textfield 。JComboBox combobox 。Node client 。UserLinkListuserLinkList。//用戶鏈表publicbooleanisStop。publicServerReceive(JTextAreatextarea,JTextFieldtextfield,JComboBoxcombobox,Nodeclient,UserLinkListuserLinkList>{yhUQsDgRT1this.textarea=textarea。this.textfield=textfield。this.client=client。this.userLinkList=userLinkLbobox=combobox。isStop=false。}publicvoidrun(>{向所有人發(fā)送用戶的列表sendUserList(>。while(!isStop&&!client.socket.isClosed(>>{try{Stringtype=(String>client.input.readObject(>。if(type.equalsIgnoreCase("聊天信息">>{StringtoSomebody=(String>client.input.readObject(>。MdUZYnKS8IStringstatus=(String>client.input.readObject(>。09T7t6eTnoStringaction=(String>client.input.readObject(>。e5TfZQIUB5Stringmessage=(String>client.input.readObject(>。s1SovAcVQMStringmsg=client.username+""+action+"對"+toSomebody+"說:"+message+"\n"。if(status.equalsIgnoreCase("悄悄話">>{msg="[悄悄話]"+msg
llVIWTNQFk。14/33個(gè)人資料整理 僅限學(xué)習(xí)使用}textarea.append(msg>。if(toSomebody.equalsIgnoreCase("所有人">>{}sendToAll(msg>。//向所有人發(fā)送消息else{try{client.output.writeObject("聊天信息">。client.output.flush(>。client.output.writeObject(msg>。client.output.flush(>。}catch(Exceptione>{//System.out.println("###"+e>。}Nodenode=userLinkList.findUser(toSomebody>。if(node!=null>{node.output.writeObject("聊天信息">。node.output.flush(>。node.output.writeObject(msg>。node.output.flush(>。}}}elseif(type.equalsIgnoreCase("用戶下線">>{Nodenode=userLinkList.findUser(client.username>。GXRw1kFW5suserLinkList.delUser(node>。Stringmsg="用戶"+client.username+"下線\n"。intcount=userLinkList.getCount(>。combobox.removeAllItems(>。combobox.addItem("所有人">。inti=0。while(i<count>{if(node==null>{node=userLinkList.findUser(i>。i++。continue。}combobox.addItem(node.username>。}i++。combobox.setSelectedIndex(0>。textarea.append(msg>。textfield.setText("在線用戶"+userLinkList.getCount(>+"人\n">。UTREx49Xj9sendToAll(msg>。//向所有人發(fā)送消息sendUserList(>。//重新發(fā)送用戶列表,刷新break。15/33個(gè)人資料整理 僅限學(xué)習(xí)使用}}catch (Exceptione>{//System.out.println(e> 。}}}/**向所有人發(fā)送消息*//**向所有人發(fā)送用戶的列表*/}4.1.4PorConf.java該類繼承自 JDialog,是用戶對服務(wù)器端偵聽端口進(jìn)行修改配置的類。主要實(shí)現(xiàn)方法源代碼如下:/**生成端口設(shè)置對話框的類*/publicclassPortConfextendsJDialog{JPanelpanelPort=newJPanel(>。JButtonsave=newJButton(>。JButtoncancel=newJButton(>。publicstaticJLabelDLGINFO=newJLabel("默認(rèn)端口號為:8888">。8PQN3NDYyPJPanelpanelSave=newJPanel(>。JLabelmessage=newJLabel(>。publicstaticJTextFieldportNumber。publicPortConf(JFrameframe>{super(frame,true>。try{}jbInit(>。catch(Exceptione>{}e.printStackTrace(>。設(shè)置運(yùn)行位置,使對話框居中}privatevoidjbInit(>throwsException{this.setSize(newDimension(300,120>>。this.setTitle("端口設(shè)置">。message.setText("請輸入偵聽的端口號:">。portNumber=newJTextField(10>。portNumber.setText(""+server.port>。save.setText("保存">。cancel.setText("取消">。16/33個(gè)人資料整理 僅限學(xué)習(xí)使用panelPort.setLayout(newFlowLayout(>>。panelPort.add(message>。panelPort.add(portNumber>。panelSave.add(newLabel("">>。panelSave.add(save>。panelSave.add(cancel>。panelSave.add(newLabel("">>。ContainercontentPane=getContentPane(>。contentPane.setLayout(newBorderLayout(>>。contentPane.add(panelPort,BorderLayout.NORTH>。contentPane.add(DLGINFO,BorderLayout.CENTER>。contentPane.add(panelSave,BorderLayout.SOUTH>。保存按鈕的事件處理save.addActionListener(newActionListener(>{publicvoidactionPerformed(ActionEventa>{intsavePort。try{savePort=Integer.parseInt(PortConf.portNumber.getText(>>。mLPVzx7ZNwif(savePort<1||savePort>65535>{PortConf.DLGINFO.setText("偵聽端口必須是0-65535之間的整數(shù)!">。PortConf.portNumber.setText("">。return。}server.port=savePort。}dispose(>。catch(NumberFormatExceptione>{PortConf.DLGINFO.setText("錯(cuò)誤的端口號,端口號請?zhí)顚懻麛?shù)!">。PortConf.portNumber.setText("">。return。}}}。關(guān)閉對話框時(shí)的操作this.addWindowListener(newWindowAdapter(>{publicvoid windowClosing(WindowEvente>{DLGINFO.setText( "默認(rèn)端口號為 :8888" >。}}。取消按鈕的事件處理cancel.addActionListener(newActionListener(>{publicvoid actionPerformed(ActionEvente>{17/33個(gè)人資料整理 僅限學(xué)習(xí)使用DLGINFO.setText( "默認(rèn)端口號為 :8888" >。dispose(> 。}}>。}}4.1.5Node.java用戶鏈表節(jié)點(diǎn)類,定義了鏈表中的用戶。主要實(shí)現(xiàn)方法源代碼如下:/**用戶鏈表的結(jié)點(diǎn)類*/publicclass Node{String username = null 。Socket socket = null 。ObjectOutputStream output = null 。ObjectInputStream input = null 。Node next = null 。}4.1.6UserLinkList.java用戶鏈表節(jié)點(diǎn)的具體實(shí)現(xiàn)類,通過構(gòu)造函數(shù)構(gòu)造用戶鏈表,定義了“添加用戶”、“刪除用戶”、“返回用戶數(shù)”、“根據(jù)用戶名查找用戶”、“根據(jù)索引查找用戶”這5個(gè)方法。主要實(shí)現(xiàn)方法源代碼如下: AHP35hB02d/**用戶鏈表*/publicclass UserLinkList{Node root 。Node pointer 。int count 。/**構(gòu)造用戶鏈表*/public UserLinkList(>{root = newNode(> 。root .next = null 。pointer = null 。count =0 。}/**添加用戶*/publicvoid addUser(Noden>{pointer = root 。while (pointer .next != null >{pointer = pointer .next 。}18/33個(gè)人資料整理 僅限學(xué)習(xí)使用pointer .next =n 。n.next = null 。count ++。}/**刪除用戶*/publicvoiddelUser(Noden>{pointer=root。while(pointer.next!=null>{if(pointer.next==n>{pointer.next=n.next。count--。break。}pointer=pointer.next。}}/**返回用戶數(shù)*/publicint getCount(>{return count 。}/**根據(jù)用戶名查找用戶*/publicNodefindUser(Stringusername>{if(count==0>returnnull。pointer=root。while(pointer.next!=null>{pointer=pointer.next。if(pointer.username.equalsIgnoreCase(username>>{returnpointer。}}returnnull。}/**根據(jù)索引查找用戶*/publicNodefindUser(intindex>{if(count==0>{returnnull。}if(index<0>{returnnull。}pointer=i=0。while(i<index+1>{if(pointer.next!=null>{pointer=pointer.next。19/33個(gè)人資料整理 僅限學(xué)習(xí)使用}else {returnnull 。}i++。}return pointer 。}}4.1.7Help.java服務(wù)器端程序幫助類。主要實(shí)現(xiàn)方法源代碼如下:/**生成設(shè)置對話框的類*/publicclass Helpextends JDialog{JPanel titlePanel = newJPanel(> 。JPanel contentPanel = newJPanel(> 。JPanel closePanel = newJPanel(> 。JButton close = newJButton(> 。JLabel title = newJLabel( "聊天室服務(wù)端幫助 ">。JTextArea help = newJTextArea(> 。Color bg= newColor(255,255,255> 。public Help(JFrameframe>{super (frame, true >。try {jbInit(> 。}catch (Exceptione>{e.printStackTrace(> 。}設(shè)置運(yùn)行位置,使對話框居中}privatevoidjbInit(>throwsException{this.setSize(newDimension(400,200>>。this.setTitle("幫助">。titlePanel.setBackground(bg>。。contentPanel.setBackground(bg>。closePanel.setBackground(bg>。help.setText("">。事件處理close .addActionListener(newActionListener(>{publicvoid actionPerformed(ActionEvente>{dispose(> 。}}>。}}20/33個(gè)人資料整理 僅限學(xué)習(xí)使用4.2聊天室客戶端設(shè)計(jì)聊天室服務(wù)端主要包括5個(gè)文件,其中Help.java類與服務(wù)器端的Help.java類作用相同,在這里就不再重復(fù)闡述,其余4個(gè)的功能如下:NDOcB141gT4.2.1client.java包含名為client的public類,其主要功能為定義客戶端的界面,添加事件偵聽與事件處理。該類定義了 Connect(>與DisConnect(>方法實(shí)現(xiàn)與服務(wù)器的連接與斷開連接。當(dāng)?shù)卿浀街付ǖ姆?wù)器時(shí),調(diào)用 ClientReceive類實(shí)現(xiàn)消息收發(fā),同時(shí)該類還定義了SendMessage(>方法來向其他用戶發(fā)送帶有表情的消息或者悄悄話。主要實(shí)現(xiàn)方法源代碼如下:1zOk7Ly2vApackageclient。importjava.awt.*。importjava.awt.event.*。importjavax.swing.*。importjava.io.*。.*。/**聊天客戶端的主框架類*/publicclassclientextendsJFrameimplementsActionListener{fuNsDv23KhprivatestaticfinallongserialVersionUID=1L。Stringip=""。//連接到服務(wù)端的ip地址intport=8888。//連接到服務(wù)端的端口號StringuserName="神馬傷不起"。//用戶名inttype=0。//0表示未連接,1表示已連接JComboBoxcombobox。//選擇發(fā)送消息的接受者JTextAreamessageShow。//客戶端的信息顯示JScrollPanemessageScrollPane。//信息顯示的滾動條JLabelexpress,sendToLabel,messageLabel。JTextFieldclientMessage。//客戶端消息的發(fā)送JCheckBoxcheckbox。//悄悄話JComboBoxactionlist。//表情選擇JButtonclientMessageButton。//發(fā)送消息JTextFieldshowStatus。//顯示用戶連接狀態(tài)Socketsocket。ObjectOutputStreamoutput。//網(wǎng)絡(luò)套接字輸出流ObjectInputStreaminput。//網(wǎng)絡(luò)套接字輸入流ClientReceiverecvThread。建立菜單欄JMenuBar jMenuBar = newJMenuBar(> 。建立菜單組JMenu operateMenu = newJMenu( "操作(O>">。建立菜單項(xiàng)21/33個(gè)人資料整理 僅限學(xué)習(xí)使用建立工具欄JToolBar toolBar = newJToolBar(> 。建立工具欄中的按鈕組件框架的大小public client(>{init(> 。// 初始化程序添加框架的關(guān)閉事件處理this .setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE>。tqMB9ew4YXthis .pack(> 。設(shè)置框架的大小this .setSize( faceSize >。this .setVisible( true >。setIconImage(getToolkit(>.getImage( "face/love.gif" >>。HmMJFY05dE設(shè)置運(yùn)行時(shí)窗口的位置this .setTitle( "聊天室客戶端 ">。 // 設(shè)置標(biāo)題}/**程序初始化函數(shù)*/publicvoid init(>{ContainercontentPane=getContentPane(> 。contentPane.setLayout( newBorderLayout(>> 。添加菜單欄初始化按鈕當(dāng)鼠標(biāo)放上顯示信息loginButton .setToolTipText( "連接到指定的服務(wù)器 ">。logoffButton .setToolTipText( "與服務(wù)器斷開連接 ">。userButton .setToolTipText( "設(shè)置用戶信息 ">。connectButton .setToolTipText( "設(shè)置所要連接到的服務(wù)器信息 ">。將按鈕添加到工具欄初始時(shí)loginButton .setEnabled( true >。logoffButton .setEnabled( false >。為菜單欄添加事件監(jiān)聽添加按鈕的事件偵聽添加滾動條添加系統(tǒng)消息的事件偵聽關(guān)閉程序時(shí)的操作22/33個(gè)人資料整理 僅限學(xué)習(xí)使用this .addWindowListener(newWindowAdapter(>{publicvoid windowClosing(WindowEvente>{if (type ==1>{DisConnect(> 。}System. exit (0>。}}>。}/**事件處理*/publicvoid actionPerformed(ActionEvente>{Objectobj=e.getSource(> 。if (obj== userItem ||obj== userButton >{ // 用戶信息設(shè)置 ViLRaIt6sk調(diào)出用戶信息設(shè)置對話框UserConfuserConf= newUserConf( this ,userName >。userConf.setVisible( true >。userName =userConf. userInputName 。}elseif (obj== connectItem ||obj== connectButton >{ // 連接服務(wù)端設(shè)置9eK0GsX7H1調(diào)出連接設(shè)置對話框naK8ccr8VIConnectConfconConf=newConnectConf(this,ip,port>。conConf.setVisible(true>。ip=conConf.userInputIp。port=conConf.userInputPort。}elseif(obj==loginItem||obj==loginButton>{//登錄B6JgIVV9aoConnect(>。}elseif(obj==logoffItem||obj==logoffButton>{//注銷P2IpeFpap5DisConnect(>。showStatus.setText("">。}elseif(obj==clientMessage||obj==clientMessageButton>{//發(fā)送消息3YIxKpScDMSendMessage(>。clientMessage.setText("">。}elseif(obj==exitButton||obj==exitItem>{//退出gUHFg9mdSsintj=JOptionPane.showConfirmDialog(this,"真的要退出嗎?","退出",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE>。uQHOMTQe79if(j==JOptionPane.YES_OPTION>{if(type==1>{DisConnect(> 。}System. exit (0>。}23/33個(gè)人資料整理 僅限學(xué)習(xí)使用}elseif (obj== helpItem >{ // 菜單欄中的幫助調(diào)出幫助對話框HelphelpDialog=newHelp(this>。}helpDialog.setVisible(true>。}publicvoidConnect(>{try{socket=newSocket(ip,port>。}catch(Exceptione>{JOptionPane.showConfirmDialog(this,"不能連接到指定的服務(wù)器。\n請確認(rèn)連接設(shè)置是否正確。","提示",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE>。IMGWiDkflPreturn。}try{output=newObjectOutputStream(socket.getOutputStream(>>。WHF4OmOgAwoutput.flush(>。input=newObjectInputStream(socket.getInputStream(>>。aDFdk6hhPdoutput.writeObject(userName>。output.flush(>。recvThread=newClientReceive(socket,output,input,combobox,messageShow,showStatus>。ozElQQLi4TrecvThread.start(>。loginButton.setEnabled(false>。loginItem.setEnabled(false>。userButton.setEnabled(false>。userItem.setEnabled(false>。connectButton.setEnabled(false>。connectItem.setEnabled(false>。logoffButton.setEnabled(true>。logoffItem.setEnabled(true>。clientMessage.setEnabled(true>。messageShow.append("連接服務(wù)器"+ip+":"+port+"成功...\n">。CvDtmAfjiAtype=1。//標(biāo)志位設(shè)為已連接}catch(Exceptione>{System.out.println(e>。return。}}publicvoidDisConnect(>{loginButton.setEnabled(true>。loginItem.setEnabled(true>。userButton.setEnabled(true>。userItem.setEnabled(true>。connectButton.setEnabled(true>。connectItem.setEnabled(true>。24/33個(gè)人資料整理 僅限學(xué)習(xí)使用logoffButton.setEnabled(false>。logoffItem.setEnabled(false>。clientMessage.setEnabled(false>。if(socket.isClosed(>>{return。}try{output.writeObject("用戶下線">。output.flush(>。input.close(>。output.close(>。socket.close(>。messageShow.append("已經(jīng)與服務(wù)器斷開連接...\n">。type=0。//標(biāo)志位設(shè)為未連接}catch(Exceptione>{//}}publicvoidSendMessage(>{QrDCRkJkxhStringtoSomebody=combobox.getSelectedItem(>.toString(>。Stringstatus=""。if(checkbox.isSelected(>>{status="悄悄話"。}Iconface=newImageIcon("face/smile.gif">。4nCKn3dlMXStringaction=actionlist.getSelectedItem(>.toString(>。Stringmessage=clientMessage.getText(>。if(socket.isClosed(>>{return。try{}output.writeObject("聊天信息">。output.flush(>。output.writeObject(toSomebody>。output.flush(>。output.writeObject(action>。output.flush(>。output.writeObject(action>。output.flush(>。output.writeObject(message>。output.flush(>。}catch(Exceptione>{//}}publicstaticvoidmain(String[]args>{newclient(>。}}25/33個(gè)人資料整理 僅限學(xué)習(xí)使用4.2.2ClientReceive.java該類是實(shí)現(xiàn)服務(wù)器端與客戶端消息收發(fā)的類。主要實(shí)現(xiàn)方法源代碼如下 :/**聊天客戶端消息收發(fā)類*/publicclass ClientReceive extends Thread{private JComboBox combobox 。private JTextArea textarea 。Socket socket 。ObjectOutputStream output 。ObjectInputStream input 。JTextField showStatus 。publicClientReceive(Socketsocket,ObjectOutputStreamoutput,ijCSTNGm0EObjectInputStreaminput,JComboBoxcombobox,JTextAreatextarea,JTextFieldshowStatus>{vfB1pxanfkthis.socket=socket。this.output=output。this.input=bobox=combobox。this.textarea=textarea。this.showStatus=showStatus。}publicvoid run(>{while (!socket .isClosed(>>{try {Stringtype=(String>input.readObject(>。if(type.equalsIgnoreCase("系統(tǒng)信息">>{Stringsysmsg=(String>input.readObject(>。textarea.append("系統(tǒng)信息:"+sysmsg>。}elseif(type.equalsIgnoreCase("服務(wù)關(guān)閉">>{output.close(>。input.close(>。socket.close(>。textarea.append("服務(wù)器已關(guān)閉!\n">。break。}elseif(type.equalsIgnoreCase("聊天信息">>{Stringmessage=(String>input.readObject(>。textarea.append(mes
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公司產(chǎn)權(quán)轉(zhuǎn)讓合同范本
- 2025年信息技術(shù)高級貸款協(xié)議
- 2025年數(shù)碼裝備展覽館長期租賃協(xié)議
- 2025年公積金貸款二手房產(chǎn)交易協(xié)議書
- 2025年中藥材供需伙伴關(guān)系合同
- 2025年員工福利住房補(bǔ)助策劃協(xié)議
- 2025醫(yī)療設(shè)備合同范例
- 2025年標(biāo)準(zhǔn)員工策劃崗位暫停薪資留職協(xié)議書
- 2025年辦公服務(wù)打印復(fù)印合同
- 2025年企業(yè)結(jié)構(gòu)調(diào)整資產(chǎn)買賣協(xié)議書
- 課堂嵌入式評價(jià)及其應(yīng)用
- 化工原理傳質(zhì)導(dǎo)論
- 《管理學(xué)基礎(chǔ)》完整版課件全套ppt教程(最新)
- 短視頻:策劃+拍攝+制作+運(yùn)營課件(完整版)
- 基金會財(cái)務(wù)報(bào)表審計(jì)指引
- 藍(lán)色卡通風(fēng)好書推薦教育PPT模板
- 2022年江蘇省泰州市中考數(shù)學(xué)試題及答案解析
- DB32∕T 4245-2022 城鎮(zhèn)供水廠生物活性炭失效判別和更換標(biāo)準(zhǔn)
- 石家莊鐵道大學(xué)四方學(xué)院畢業(yè)設(shè)計(jì)46
- 智能化系統(tǒng)培訓(xùn)
- 部編版五年級語文下冊第四單元課時(shí)作業(yè)本有答案
評論
0/150
提交評論