

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 8/8Java項(xiàng)目(Chat即時(shí)聊天系統(tǒng)) Java程序設(shè)計(jì)實(shí)訓(xùn)開發(fā)Chat即時(shí)聊天系統(tǒng) 一、開放實(shí)驗(yàn)項(xiàng)目 Java項(xiàng)目開發(fā)Chat即時(shí)聊天系統(tǒng) 二、開放實(shí)驗(yàn)時(shí)間 201X.XX.XX201X.XX.XX 三、開放實(shí)驗(yàn)地點(diǎn) 專業(yè)微機(jī)室二(B-4009) 四、開放實(shí)驗(yàn)?zāi)康?綜合利用JDK、Eclipse開發(fā)環(huán)境,實(shí)現(xiàn)中小型項(xiàng)目的設(shè)計(jì)。 本系統(tǒng)采用C/S架構(gòu),基于TCP協(xié)議實(shí)現(xiàn)數(shù)據(jù)在服務(wù)器和客戶端之間進(jìn)行傳輸,實(shí)現(xiàn) 聊天信息的存儲。 通過“Chat即時(shí)聊天系統(tǒng)”的設(shè)計(jì)過程,深刻了解掌握面向?qū)ο蟪绦蛟O(shè)計(jì)語言Java的 核心概念和特性;了解編程技術(shù)知識,學(xué)會處理異常狀況,深入了解Java數(shù)據(jù)庫功能,
2、熟 練掌握圖形界面的操作技術(shù),掌握J(rèn)ava應(yīng)用軟件的開發(fā)環(huán)境和開發(fā)過程;靈活選擇程序設(shè) 計(jì)思想,在編寫過程中進(jìn)一步體會Java與其它編程語言的不同之處,分析出Java的優(yōu)點(diǎn)和 先進(jìn)之處。同時(shí),使學(xué)生能夠深入的了解軟件項(xiàng)目開發(fā)的流程和步驟,掌握每一部分的設(shè)計(jì) 和實(shí)現(xiàn)方法,以及充分利用現(xiàn)有的軟件工程設(shè)計(jì)工具來完成項(xiàng)目的設(shè)計(jì)。 五、開放實(shí)驗(yàn)內(nèi)容 1概要設(shè)計(jì) 采用Socket類建立套接字實(shí)現(xiàn)客戶端與服務(wù)端的通訊。 總體數(shù)據(jù)流圖 服務(wù)端數(shù)據(jù)流圖 2.設(shè)計(jì)原理 (1)利用多線程實(shí)現(xiàn)多客戶機(jī)制。服務(wù)器總是在指定的端口上監(jiān)聽是否有客戶請求,一旦監(jiān)聽到客戶請求,服務(wù)器就會啟動(dòng)一個(gè)專門的服務(wù)線程來響應(yīng)該客戶的請求
3、,而服務(wù)器本身在啟動(dòng)完線程之后馬上又進(jìn)入監(jiān)聽狀態(tài),等待下一個(gè)客戶的到來。 (2).服務(wù)器在接受客戶方的請求后,立即高度一個(gè)線程以處理服務(wù)器與客戶方之間的交互,主程序則返回繼續(xù)監(jiān)聽端口,等待下一個(gè)客戶的連接請求。前一個(gè)線程在完成相應(yīng)的交互過程后自動(dòng)退出,連接也將自動(dòng)關(guān)閉。 (3).在服務(wù)器的程序中首先創(chuàng)建單個(gè)Server Socket,并調(diào)用accept()來等候一個(gè)新連接,一旦accept()返回,就取得獲得結(jié)果的Socket,并用它新建 一個(gè)線程,令其只為那個(gè)特定的客戶提供服務(wù)。然后再調(diào)用accept(),等候下一個(gè)新的連接請求。 3.客戶端設(shè)計(jì) (1)、數(shù)據(jù)流圖 . 定義Client類控制
4、客戶端,用于實(shí)現(xiàn)客戶端的接收信息與發(fā)送信息等操作(2)、客戶端代碼 import http:/./doc/62eecc5310661ed9ac51f323.html .*; import java.io.*; public class Client extends Thread Socket skt; / 用于客戶端的連接 InetAddress host; / 主機(jī)地址 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(準(zhǔn)備連線,稍后!); 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、服務(wù)端的設(shè)計(jì) (1)、數(shù)據(jù)流圖 定義Server類控制
8、服務(wù)端,用于實(shí)現(xiàn)服務(wù)端的接收信息和發(fā)送信息等操作(2)、服務(wù)端代碼 import java.awt.*; import http:/./doc/62eecc5310661ed9ac51f323.html .*; import java.io.*; public class Server extends Thread ServerSocket skt; / ServerSocket類監(jiān)聽進(jìn)入的連接,為每個(gè)新的連接產(chǎn)生一個(gè)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(); /當(dāng)有客戶端連接時(shí)就新
10、建一個(gè)子線程 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); / 設(shè)置組件可用性 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、聊天界面的設(shè)計(jì) (1)、通過調(diào)用Face類對界面進(jìn)行管理設(shè)計(jì),運(yùn)用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() /實(shí)例化組件 clientBtn = new Button(客戶端); serverBtn = new Button(服務(wù)器); 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); /設(shè)置格式 setLocation(350, 250); /窗口顯示在屏幕的位置坐標(biāo) setSize(400, 320); /設(shè)置窗體大小 setTitle(圖形界面的聊天程序); this.setVisible(true); /設(shè)置窗體可見 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(客戶端); ); /客戶端事件響應(yīng) 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(成為服務(wù)器); tfaddress.setEnabled(false); tfport.setEnabled(false); serverBtn.setEnabled(false); clientBtn.setEnabled(false); tfname.setText(服務(wù)器); ); /服務(wù)器端事件響應(yīng) addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); /窗口事件響應(yīng) public static void main(String args) /主方法 frm = new Face(); private c
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 和單位食堂合同范本
- 單方出資合作合同范例
- 合同范本中自動(dòng)簽字
- 叉車裝卸出租合同范例
- 勞務(wù)分包合同范本全國
- 優(yōu)化住房公積金政策 助力民生改善
- 合同范本模板采購方案
- 剪輯制作費(fèi)合同范本
- 知識產(chǎn)權(quán)保護(hù)發(fā)展行動(dòng)計(jì)劃
- 開放合作促進(jìn)全球經(jīng)濟(jì)互利共贏
- 拼多多店鋪運(yùn)營策略研究
- 小學(xué)班級管理現(xiàn)狀及策略分析
- 2023學(xué)年完整公開課版繪本閱讀We all love ice cream
- 半固態(tài)電池技術(shù)工藝
- 初中數(shù)學(xué)二元一次方程組作業(yè)設(shè)計(jì)
- GB/T 2659.3-2023世界各國和地區(qū)及其行政區(qū)劃名稱代碼第3部分:原先使用的國家和地區(qū)代碼
- 越劇基本知識講座
- 深圳中考自主招生簡歷
- 壽光金遠(yuǎn)東變性淀粉有限公司年產(chǎn)2萬噸乳酸、丙交酯、聚乳酸項(xiàng)目環(huán)境影響報(bào)告表
- 美術(shù)社團(tuán)活動(dòng)記錄
- (完整word版)Word信紙(A4橫條直接打印版)模板
評論
0/150
提交評論