




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
騰訊騰訊QQ(OICQ是由深圳市騰訊計算機系統公司幵發的, 基于Internet的即時聊騰訊騰訊QQ(OICQ是由深圳市騰訊計算機系統公司幵發的, 基于Internet的即時聊JavaJava語言程序設計課程設計題目 聊天小程序 (socket編程+多線程)學 院 商學院 專業 信息管理與信息系統 班 級 信息111 學號8 學生姓名 張語軒 指導教師 余法紅 編寫日期 目錄、需求分析當今主流的聊天工具有QQUCMSNMessenger等,國內最熱門的當屬QQ天工具。您可以使用QQ和好友用戶進行交流,信息即時發送,即時回復,收發及時、功能全面。此外QQ還具有BP機網上尋呼、聊天室、傳輸文件、語音郵件、手機短訊服務等功能,QQ不僅僅是虛擬的網絡尋呼機,更可與傳統的無線尋呼網、GSM移動電話的短消息系統互聯,目前 QQ和全國多家尋呼臺、移動通信公司有業務合作。是國內不可多得的中文網絡尋呼機。 QQ支持顯示朋友在線信息、即時傳送信息、即時交談、即時發送文件和網址。QC可以在Win95/98/NT/2000操作系統下運行,是十分靈活的網絡尋呼工具。它會自動檢查您是否已聯網,如果您的電腦已連入Internet,可以搜索網友、顯示在線網友,可以根據QC號、昵稱、姓名、email地址等關鍵詞來查找,找到后可加入到通訊錄中。當您的通訊錄中的網友在線時,QQ中朋友的頭像就會顯示在線,根據提示就可以發送信息,如果對方登記了尋呼機或幵通了GSM手機短消息,即使離線了,您也可及時將信息傳遞給您的好友。雖然以上這些軟件是免費的,并且功能越來越強大。但是它們的唯一的不足就是必須要聯網或者下載到它們的服務端,要不然是沒法脫離Intenet使用的。為了能在一個沒有連接到Intenet的局域網使用聊天工具,那就必須要有服務器端。本系統就是包括服務器端與客戶端,可以在局域網聊天的一個工具。二、系統概述我們實現的是局域網中的聊天功能,運行服務程序后,服務器創建成功,然后使服務器對某一個設定的端口處于監聽狀態,當有客戶端請求建立連接時,服務器就可接受請求,建立連接!這樣服務器和客戶端就可相互發送消息,實現聊插件幵發,插件幵發,EclipsePlatform 則是一個幵放的可擴展 IDE,提供了一個通用的幵插件幵發,插件幵發,EclipsePlatform 則是一個幵放的可擴展 IDE,提供了一個通用的幵天功能!系統的功能要求A.服務器端主要功能如下:在特定端口上進行偵聽,等待客戶端連接。用戶可以配置服務器端的偵聽端口,默認端口為 8888。向已經連接到服務器端的用戶發送系統消息。統計在線人數。當停止服務時,斷開所有的用戶連接。B.客戶端的主要功能如下:連接到已經開啟聊天服務的服務器端。用戶可以配置要連接的服務器端的IP地址和端口號。用戶可以配置連接后顯示的用戶名。當服務器端開啟的話,用戶可以隨時登錄和注銷。用戶可以向所有人或某一個人發送消息。三、 系統運行環境本程序基于java和Eclipse開發環境,可以在一般的裝有windows系統的主機上運行。Eclipse是一個開放源代碼的軟件開發項目,專注于為高度集成的工具開發提供一個全功能的、具有商業品質的工業平臺。它主要由Eclipse項目、Eclipse工具項目和Eclipse技術項目三個項目組成,具體包括四個部分組成——EclipsePlatform、JDTCDT和PDEJDT支持Java幵發、CDT支持C幵發、PDE用來支持發平臺。它提供建造塊和構造并運行集成軟件幵發工具的基礎。四、功能需求描述本系統針對局域網進行聯機聊天。聊天室分為服務器端和客戶端兩部分,服務器端程序主要負責偵聽客戶端發來的信息,客戶端需要登陸到服務器端才可以實現正常的聊天功能。本系統主要實現如下功能:其界面主要采用了包,包以及包等。程序實現了聊天室的基本功能,其中有:1、 啟動服務器。2、 進入客戶端界面。3、 登錄聊天室。4、 發送信息(實現按回車鍵發送消息)。5、 關閉服務器。服務器:在特定端口上進行偵聽,等待客戶端連接。向已經連接到服務器端的用戶發送系統消息。當停止服務時,斷幵所有的用戶連接。系統運行穩定、安全可靠。一臺主機只能啟動一個服務器。客戶端:連接到已經幵啟聊天服務的服務器端。當服務器端幵啟后,用戶可以發表聊天信息。用戶可以向所有人或某一個人發送消息。系統運行穩定、安全可靠
五、總體設計聊天系統的設計跟普通網站設計有著許多不同的地方,普通網站設計所考慮的因素,例如,普通網站需要對布局進入大量美化以及動畫設計等等,而聊天室只要提供滿足訪客雙方直接實時聊天即可。因此,在設計聊天系統的過程中,必須要考慮好以下幾個設計要點:在Internet上的聊天程序一般都是以服務器提供服務端連接響應, 使用者通過客戶端程序登錄到服務器,就可以與登錄在同一服務器上的用戶交談,這是一個面向連接的通信過程。因此,程序要在 TCP/IP環境下,實現服務器端和客戶端兩部分程序。首先通過繼承JFrame類構造服務器界面。設計客戶端程序使其能夠完成正常的通信功能設計偵聽程序,使其顯示登錄的 ip地址端口號,以及用戶昵稱,通過偵聽按鈕可以調用客戶端程序,實現聊天功能。六、系統模塊結構圖六、系統模塊結構圖主要功能框架如下圖所示:代碼:客戶端A客戶端C丿 '?T 、上服務器 發客戶端 .>J退出線 纟線 送\服聊退聊1)packagechat;import.*;publicclassActionProcessimplementsRunnable{privateChatClientclient;Stringname="";Stringsendtoname="";StringsendtoID;Stringfilename="";Stringfilepath="";publicActionProcess(ChatClientclient){=client;}publicvoidaction(ActionEvente)throwsException{if()=={try{else{Stringaddr=("請輸入服務器IP:");InetAddressaddress=(addr);InetSocketAddresssocketAddress=newInetSocketAddress(address,5555);=newThread(this);}}catch(IOExceptionee){}}if()=={try{filesendServerfilesendserver=newfilesendServer();();}catch(Exceptionee){();}}if()=={try{filesendClientfilesendclient=newfilesendClient();();}catch(Exceptionee){}}if()=={try{}catch(IOExceptione1){();}(0);}if("表情")){}else{em+="著";}if()=={if(s!=null){try{}catch(IOExceptione1){}{{{{}}if()=={sendtoID=("請輸入對方ID:");sendtoname=("請輸入對方姓名:");if(s!=null){try{}catch(IOExceptione1){}}}}}publicvoidrun(){Strings=null;while(true)sendtoall=newButton(" sendtoall=newButton(" 群聊");try{}catch(IOExceptione){try{}catch(Exceptionep){}break;}}}}(2)packagechat;import.*;import.*;import.*;import.*;publicclassClient{publicstaticvoidmain(Stringargs[])newChatClient();}}classChatClientextendsFrameimplementsActionListener,Runnable{publicButtonlisten,connection,sendtoall,sendtoone,exit,filesend;publicJComboBoxemote;publicTextFieldinputName,inputContent;publicTextAreachatResult;publicSocketsocket=null;publicDataInputStreamin=null;publicDataOutputStreamout=null;publicThreadthread;ChatClient(){socket=newSocket();Boxbox1=();listen=newButton("作為服務器監聽");connection=newButton("連接服務器");filesend=newButton("發送文件");exit=newButton("退出");sendtoone=newButton("私聊");(false);(false);(false);(false);inputName=newTextField(6);(newColor(162,231,250));inputContent=newTextField(22);(newColor(162,231,250));chatResult=newTextArea("",17,20,;(newColor(162,231,250));JLabeljlname=newJLabel(" 輸入昵稱");(jlname);(inputName);(listen);(connection);(filesend);(exit);Boxbox2=();emote=newJComboBox();(newDefaultComboBoxModel(newString[]{"表情","微笑","甜笑","驚喜","嘻嘻","扮酷","嘿嘿","傻笑","好奇","媚眼","鬼臉","陶醉","害(10));(10));(10));(10));羞","生氣","嚷嚷","發怒","傷心","高明","菜鳥","問號","狂笑大哭","示愛","呻吟","想想"}));(false);JLabeljlintput=newJLabel("輸入聊天內容");(jlintput);(inputContent);(emote);(sendtoall);(sendtoone);(this);(this);(this);(this);(this);(this);Boxbox3=();(chatResult);thread=newThread(this);Boxbox0=();(10));(box1);(box3);(10));(box2);(10));add(box0);setBounds(10,30,500,400);setBackground(newColor(80,212,248));setVisible(true);validate();addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){(0);try{();}catch(IOExceptione1){();}}});}publicvoidactionPerformed(ActionEvente){ActionProcessactionProcess=newActionProcess(this);try{(e);}catch(Exceptione1){();}}publicvoidrun(){Strings=null;while(true){try{s=();("\n"+s);}catch(IOExceptione){("與服務器斷開連接");try{();}catch(Exceptionep){}break;}}}}(3)packagechat;import.*;import.*;import.*;publicclassChatServer{publicstaticvoidmain(String[]args)throwsException{ServerSocketsvSocket=null;Vectorthreads=newVector();try{svSocket=newServerSocket(5555);}catch(Exceptionex){return;}try{intnid=0;while(true){Socketsocket=();ServerThreadst=newServerThread(socket,threads);(nid++);(st);newThread(st).start();for(inti=0;i<();i++){ServerThreadtemp=(ServerThread)(i);}}}catch(Exceptionex){}}}classServerThreadimplementsRunnable{privateVectorthreads;privateSocketsocket=null;privateDataInputStreamin=null;privateDataOutputStreamout=null;privateintnid;publicServerThread(Socketsocket,Vectorthreads){=socket;=threads;try{in=newDataInputStream());out=newDataOutputStream());}catch(Exceptionex){}}publicvoidrun(){try{while(true){Stringreceive=();if(receive==null)return;if("黯然下線了")){for(inti=0;i<();i++){ServerThreadst=(ServerThread)(i);("***"+receive+"***");}}elseif("上線了")){for(inti=0;i<();i++){ServerThreadst=(ServerThread)(i);("<"+getID()+">:"+receive);}}elseif("監聽中")){for(inti=0;i<();i++){ServerThreadst=(ServerThread)(i);("***"+receive+"***");}}elseif("說")){if("大家")){for(inti=0;i<();i++){ServerThreadst=(ServerThread)(i);("<"+getID()+">:"+receive);}}else{inttemp=("<");inttemp1=(">");StringtempS=(temp+1,temp1);inti=(tempS);ServerThreadst=(ServerThread)(i);("<"+getID()+">:"+receive);st=(ServerThread)(getID());("<"+getID()+">:"+receive);}}else{ServerThreadst=(ServerThread)(getID());("***"+receive+"***");}}}catch(Exceptionex){(this);();}try{();}catch(Exceptionex){();}}publicvoidwrite(Stringmsg){synchronized(out){try{(msg);}catch(Exceptionex){}}}publicintgetID(){return;}publicvoidsetID(intnid){=nid;}}(4)packagechat;publicclassfilesendClient{publicvoidfilesend()throwsException{StringsendtoIP=("請輸入對方IP:");Socketsocket=newSocket(sendtoIP,1234);BufferedReaderbr=newBufferedReader(newInputStreamReader()));PrintStreamps=newPrintStream());Filefile=getFile();());());Stringmsg=();if("已存在".equals(msg)){(null,"文件已存在,請不要重復上傳!");return;}longfinishLen=(msg);FileInputStreamfis=newFileInputStream(file);OutputStreamout=();byte[]buffer=newbyte[1024];intlen;(finishLen);while((len=(buffer))!=-1)(buffer,0,len);();();}publicFilegetFile()throwsException{Filefile=null;booleanflag=false;while(flag==false){Stringfilepath=("請輸入要上傳的路徑:");file=newFile(filepath);if(!()){(null,"您輸入的路徑不存在,請重新輸入!");flag=false;}elseif()){(null,"占不支持文件夾上傳!請輸入一個文件路徑!");flag=false;}elseflag=true;}returnfile;}}(5)packagechat;publicclassfilesendServer{publicvoidfilereceive()throwsException{ServerSocketserverSocket=newServerSocket(1234);(null,"服務已啟動,綁定1234端口!");while(true){Socketsocket=();newfileServerThread(socket).start();}}}classfileServerThreadextendsThread{Socketsocket;publicfileServerThread(Socketsocket){=socket;}publicvoidrun(){FileOutputStreamfos=null;try{BufferedReaderbr=newBufferedReader(newInputStreamReader()));PrintStreamps=newPrintStream());StringfileName=();longfileLen=());Filedir=newFile("upload");();Filefile=newFile(dir,fileName);if()&&()==fileLen){("已存在");return;}else{());}Stringtime=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(newDate());longstart=();InputStreamin=();fos=newFileOutputStream(file,true);byte[]buffer=newbyte[1024];intlen;while((len=(buffer))!=-1){(buffer,0,len);if()==fileLen)break;}();longend=();time=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(newDate());("上傳成功");();}catch(IOExceptione){if(fos!=null)try{();}catch(IOExceptione1){();}}}}運行結果:將5個Java源文件:、、、、。分別編譯這5個Java源文件,或運行“javac*.java命令,編譯全部的源文件,然后運行連接服務器的主類,即。服務器啟動成功結果分析:在進入聊天室之前必須先啟動服務器,實現服務器端的連接。然后運行結果分析:進行服務器監聽,再運行。私聊結果分析:進入聊天室,在輸入框中輸入聊天內容,點擊私聊群聊結果分析:多個用戶進入聊天室之后,在輸入框中輸入聊天內容,點擊群聊運行、文件。結果分析:進行文件傳送八、設計體會這次設計經過幾天的不懈努力,程序基本滿足聊天的需要。完成后的程序實現了用戶登陸聊天室、用戶在線聊天、用戶退出等功能。在這次程序設計中,我主要負責需求分析,功能需求描述,系統模塊圖等的撰寫,程序設計期間,通過詢問老師,同學和網上搜索相關解答等多種方式學習到很多課堂上沒有的知識,還積累了一定的實踐經驗,增強
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綿陽師范學院《ERP沙盤模擬》2023-2024學年第二學期期末試卷
- 長春金融高等專科學校《綠色營銷》2023-2024學年第二學期期末試卷
- 2025物業管理服務合同書
- 2025年戶外裝備租賃合同協議書
- 2025授權公司設備租賃合同范本
- 2025建筑公司裝飾工程內部承包經營合同范本
- 2025年高考歷史總復習高中歷史130個關鍵概念一篇搞定
- 【7道期中】安徽省淮北市“五校聯盟”2023-2024學年七年級下學期期中道德與法治試題(含解析)
- 2025房地產合作開發合同
- 山西省晉中市介休市2024-2025學年七年級下學期期中考試生物試題
- (正式版)QB∕T 2761-2024 室內空氣凈化產品凈化效果測定方法
- 北京市海淀區2023-2024學年八年級下學期期末物理試卷
- CJJ 232-2016 建筑同層排水工程技術規程
- JBT 14732-2024《中碳和中碳合金鋼滾珠絲杠熱處理技術要求》
- 固體氧化物燃料電池陰極的絲網印刷制備及其性能評價的研究
- 制定偵破方案教案設計
- 采礦工程畢業設計-礦井設計(含全套CAD圖紙)
- 2024春期國開電大本科《中國當代文學專題》在線形考(形考任務一至六)試題及答案
- 《燭之武退秦師》教學設計 統編版高中語文必修下冊
- RFJ 011-2021 人民防空工程復合材料(玻璃纖維增強塑料)防護設備選用圖集(試行)
- 《公務員法》專題講座
評論
0/150
提交評論