版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 8/8Java項目(Chat即時聊天系統(tǒng)) Java程序設計實訓開發(fā)Chat即時聊天系統(tǒng) 一、開放實驗項目 Java項目開發(fā)Chat即時聊天系統(tǒng) 二、開放實驗時間 201X.XX.XX201X.XX.XX 三、開放實驗地點 專業(yè)微機室二(B-4009) 四、開放實驗目的 綜合利用JDK、Eclipse開發(fā)環(huán)境,實現(xiàn)中小型項目的設計。 本系統(tǒng)采用C/S架構,基于TCP協(xié)議實現(xiàn)數(shù)據(jù)在服務器和客戶端之間進行傳輸,實現(xiàn) 聊天信息的存儲。 通過“Chat即時聊天系統(tǒng)”的設計過程,深刻了解掌握面向對象程序設計語言Java的 核心概念和特性;了解編程技術知識,學會處理異常狀況,深入了解Java數(shù)據(jù)庫功能,
2、熟 練掌握圖形界面的操作技術,掌握Java應用軟件的開發(fā)環(huán)境和開發(fā)過程;靈活選擇程序設 計思想,在編寫過程中進一步體會Java與其它編程語言的不同之處,分析出Java的優(yōu)點和 先進之處。同時,使學生能夠深入的了解軟件項目開發(fā)的流程和步驟,掌握每一部分的設計 和實現(xiàn)方法,以及充分利用現(xiàn)有的軟件工程設計工具來完成項目的設計。 五、開放實驗內(nèi)容 1概要設計 采用Socket類建立套接字實現(xiàn)客戶端與服務端的通訊。 總體數(shù)據(jù)流圖 服務端數(shù)據(jù)流圖 2.設計原理 (1)利用多線程實現(xiàn)多客戶機制。服務器總是在指定的端口上監(jiān)聽是否有客戶請求,一旦監(jiān)聽到客戶請求,服務器就會啟動一個專門的服務線程來響應該客戶的請求
3、,而服務器本身在啟動完線程之后馬上又進入監(jiān)聽狀態(tài),等待下一個客戶的到來。 (2).服務器在接受客戶方的請求后,立即高度一個線程以處理服務器與客戶方之間的交互,主程序則返回繼續(xù)監(jiān)聽端口,等待下一個客戶的連接請求。前一個線程在完成相應的交互過程后自動退出,連接也將自動關閉。 (3).在服務器的程序中首先創(chuàng)建單個Server Socket,并調用accept()來等候一個新連接,一旦accept()返回,就取得獲得結果的Socket,并用它新建 一個線程,令其只為那個特定的客戶提供服務。然后再調用accept(),等候下一個新的連接請求。 3.客戶端設計 (1)、數(shù)據(jù)流圖 . 定義Client類控制
4、客戶端,用于實現(xiàn)客戶端的接收信息與發(fā)送信息等操作(2)、客戶端代碼 import http:/./doc/62eecc5310661ed9ac51f323.html .*; import java.io.*; public class Client extends Thread Socket skt; / 用于客戶端的連接 InetAddress host; / 主機地址 int port; / 端口號 BufferedReader theInputStream; PrintStream theOutputStream; String readin; Face chat; public Cli
5、ent(String ip, int p, Face chat) try host = InetAddress.getByName(ip); / 獲取IP地址 port = p; / 獲取端口號 this.chat = chat; catch (IOException e) chat.ta.append(e.toString(); public void run() try chat.ta.append(準備連線,稍后!); skt = new Socket(host, port); / 新建Socket對象 chat.ta.append(成功n); / 緩沖區(qū)末尾添加字符串 theInput
6、Stream = new BufferedReader(new InputStreamReader(skt.getInputStream(); theOutputStream = new PrintStream(skt.getOutputStream(); while (true) readin = theInputStream.readLine(); chat.ta.append(readin + n); catch (SocketException e) chat.ta.append(未連上!n); chat.clientBtn.setEnabled(true); chat.serverB
7、tn.setEnabled(true); chat.tfaddress.setEnabled(true); chat.tfport.setEnabled(true); try skt.close(); catch (IOException err) chat.ta.append(err.toString(); catch (IOException e) chat.ta.append(e.toString(); public void dataout(String data) theOutputStream.println(data); 4、服務端的設計 (1)、數(shù)據(jù)流圖 定義Server類控制
8、服務端,用于實現(xiàn)服務端的接收信息和發(fā)送信息等操作(2)、服務端代碼 import java.awt.*; import http:/./doc/62eecc5310661ed9ac51f323.html .*; import java.io.*; public class Server extends Thread ServerSocket skt; / ServerSocket類監(jiān)聽進入的連接,為每個新的連接產(chǎn)生一個Socket對象 Socket Client =new Socket10; Socket Client1=null; int i = 0; TextArea in; int po
9、rt,k=0,l=0; PrintStream theOutputStream; Face chat; public Server(int port, Face chat) try this.port = port; skt = new ServerSocket(port); this.chat = chat; catch (IOException e) chat.ta.append(e.toString(); public void run() chat.ta.append(等待連線); while (true) try Clientk = skt.accept(); /當有客戶端連接時就新
10、建一個子線程 if (i 2) ServerThread server = new ServerThread10; serverk= new ServerThread(Clientk, this.chat, i); l=server.length; serverk.start(); chat.ta.append(客戶端+ Clientk.getInetAddress() + 已連線n); /for(int j=0;jserver.length;j+) theOutputStream = new PrintStream(serverk.getClient().getOutputStream();
11、 i = serverk.getI(); k+; else /theOutputStream = new PrintStream(null); catch (SocketException e) catch (IOException e) chat.ta.append(e.toString(); public void dataout(String data) /for(int j=0;jl;j+) theOutputStream.println(data); class ServerThread extends Thread ServerSocket skt; Socket Client;
12、TextArea in; int port,i; BufferedReader theInputStream; PrintStream theOutputStream; String readin; Face chat; public ServerThread(Socket s, Face chat, int i) this.i = +i; Client = s; this.chat = chat; public int getI() return this.i; public Socket getClient() return this.Client; public void run() t
13、ry theInputStream = new BufferedReader(new InputStreamReader(Client.getInputStream(); theOutputStream = new PrintStream(Client.getOutputStream(); while (true) readin = theInputStream.readLine(); chat.ta.append(readin + n); catch (SocketException e) chat.ta.append(連線中斷!n); / 設置組件可用性 chat.clientBtn.se
14、tEnabled(true); chat.serverBtn.setEnabled(true); chat.tfaddress.setEnabled(true); chat.tfport.setEnabled(true); try i -; skt.close(); Client.close(); catch (IOException err) chat.ta.append(err.toString(); catch (IOException e) chat.ta.append(e.toString(); public void dataout(String data) theOutputSt
15、ream.println(data); 5、聊天界面的設計 (1)、通過調用Face類對界面進行管理設計,運用Button、TextArea、Label等組件,然后通過actionPerformed觸發(fā)事件來完成操作。 (2)、界面代碼 import java.awt.*; import java.awt.event.*; public class Face extends Frame private static final long serialVersionUID = 1L; Button clientBtn, serverBtn; TextArea ta; TextField tfad
16、dress, tfport, tftype,tfname; Label lbl1,lbl2,lbl3,lbl4; int port; Client client; Server server; boolean iamserver; static Face frm; public Face() /實例化組件 clientBtn = new Button(客戶端); serverBtn = new Button(服務器); ta = new TextArea(, 10, 50,TextArea.SCROLLBARS_BOTH); lbl1 = new Label(IP地址:); tfaddress
17、 = new TextField(, 10); lbl2 = new Label(端口:); tfport = new TextField(8888); lbl3 = new Label(發(fā)送內(nèi)容:); tftype = new TextField(25); lbl4=new Label(昵稱:); tfname=new TextField(30); tftype.addKeyListener(new TFListener(); ta.setEditable(false); /向容器中加入以上組件 setLayout(new FlowLayout(); add(lbl1); add(tfadd
18、ress);add(lbl2);add(tfport);add(serverBtn); add(clientBtn);add(lbl4);add(tfname);add(ta);add(lbl3);add(tftype); /設置格式 setLocation(350, 250); /窗口顯示在屏幕的位置坐標 setSize(400, 320); /設置窗體大小 setTitle(圖形界面的聊天程序); this.setVisible(true); /設置窗體可見 clientBtn.addActionListener(new ActionListener() public void actio
19、nPerformed(ActionEvent e) port = Integer.parseInt(tfport.getText(); client = new Client(tfaddress.getText(), port, frm); client.start(); tfaddress.setEnabled(false); tfport.setEnabled(false); serverBtn.setEnabled(false); clientBtn.setEnabled(false); tfname.setText(客戶端); ); /客戶端事件響應 serverBtn.addActi
20、onListener(new ActionListener() public void actionPerformed(ActionEvent e) port = Integer.parseInt(tfport.getText(); server = new Server(port, frm); server.start(); iamserver = true; tfaddress.setText(成為服務器); tfaddress.setEnabled(false); tfport.setEnabled(false); serverBtn.setEnabled(false); clientBtn.setEnabled(false); tfname.setText(服務器); ); /服務器端事件響應 addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); /窗口事件響應 public static void main(String args) /主方法 frm = new Face(); private c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 塔吊安裝施工協(xié)議
- 電影節(jié)套房租賃協(xié)議
- 商場防火門安裝合同定案
- 數(shù)字創(chuàng)意產(chǎn)業(yè)園租賃合同
- 劇院舞臺植物布置租賃合同
- 石家莊市工業(yè)園區(qū)租賃合同
- 宿舍樓消防設施維護合同
- 城市安全防范工程安裝協(xié)議
- 紙張供需合同范例
- 模具加工訂制合同范例
- 建設工程竣工驗收消防查驗報告參考模板
- 第三章熱分析
- “小學數(shù)學概念教學”課題研究
- 視神經(jīng)炎專家共識PPT醫(yī)學課件
- word中表格的使用(課堂PPT)
- 變電站電氣工程質量監(jiān)理旁站點及旁站監(jiān)理記錄
- 流動資金缺口測算表
- 混凝土結構設計原理課程設計
- 成績加權平均分計算器
- 鈑金件質量檢驗報告單
- 航空集裝器知識完整版
評論
0/150
提交評論