簡單Java網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)實(shí)習(xí)報(bào)告_第1頁
簡單Java網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)實(shí)習(xí)報(bào)告_第2頁
簡單Java網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)實(shí)習(xí)報(bào)告_第3頁
簡單Java網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)實(shí)習(xí)報(bào)告_第4頁
簡單Java網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)實(shí)習(xí)報(bào)告_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、xxxJAVA程序設(shè)計(jì)實(shí)習(xí)報(bào)告實(shí)習(xí)性質(zhì): 課程實(shí)習(xí) 實(shí)習(xí)單位: 學(xué) 院: 班 級: 學(xué)生姓名: xxx 學(xué) 號: 指導(dǎo)老師: 實(shí)習(xí)時(shí)間: 2013-6-10至2013-6-14 Java網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)一、 實(shí)習(xí)目的Java網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)的開發(fā)是一個(gè)實(shí)踐教學(xué)環(huán)節(jié),旨在使學(xué)生通過系統(tǒng)開發(fā)過程,培養(yǎng)創(chuàng)造性的設(shè)計(jì)能力和分析、解決問題的能力。鞏固學(xué)生已學(xué)知識,使學(xué)生熟悉應(yīng)用系統(tǒng)開發(fā)過程,提高學(xué)生對知識的融會(huì)貫通能力及動(dòng)手能力。二、 實(shí)習(xí)內(nèi)容及要求問題描述:本實(shí)習(xí)以Java在網(wǎng)絡(luò)通訊上的應(yīng)用為主題,在熟悉Java語言在網(wǎng)絡(luò)通信中的特點(diǎn)的基礎(chǔ)上,利用Java的跨平臺,安全性和多線程等眾多優(yōu)點(diǎn),開發(fā)一個(gè)J

2、ava在網(wǎng)絡(luò)通訊上的編程實(shí)例:即時(shí)通訊聊天。Java網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)設(shè)計(jì)要求:即時(shí)通訊系統(tǒng)主要采用Java語言實(shí)現(xiàn)服務(wù)器,客戶端程序的功能。本系統(tǒng)是基于TCP協(xié)議的編程,實(shí)現(xiàn)了網(wǎng)上聊天功能。該聊天系統(tǒng)采用C/S架構(gòu),由服務(wù)服務(wù)器端和客戶端組成。服務(wù)器端具有以下功能:(1) 啟動(dòng)服務(wù)器,建立偵聽,接受客戶端連接。(2) 接收、轉(zhuǎn)發(fā)聊天信息。(3) 接受客戶端關(guān)閉消息。聊天客戶端具有如下功能:(1) 連接服務(wù)器,發(fā)送用戶登錄請求。(2) 向服務(wù)器發(fā)送聊天信息。(3) 接收服務(wù)器端轉(zhuǎn)發(fā)的聊天信息。三、 實(shí)習(xí)內(nèi)容及結(jié)果1. 需求分析(1)功能需求服務(wù)器端:1、 啟動(dòng)服務(wù)器,建立偵聽,接收客戶端連接。2

3、、 接收、轉(zhuǎn)發(fā)聊天信息。3、 接收客戶端關(guān)閉消息。客戶端:1、 連接服務(wù)器,發(fā)送用戶登錄請求。2、 向服務(wù)器發(fā)送聊天信息。3、 接收服務(wù)器端轉(zhuǎn)發(fā)的聊天信息。(2)用例圖 啟動(dòng)服務(wù)器. 接收聊天信息 聊天信息轉(zhuǎn)發(fā)聊天信息服務(wù)器端 關(guān)閉服務(wù)器 用戶登錄 發(fā)送消息 聊 天 接收消息退出聊天室 用戶2. 詳細(xì)設(shè)計(jì)(各個(gè)模塊流程圖或類圖)服務(wù)器端開放端口,得帶每個(gè)客戶端連接。接受客戶端請求。監(jiān)聽客戶端的通訊??蛻舳薃發(fā)送信息客戶端B發(fā)送信息客戶下線結(jié)束2. 系統(tǒng)實(shí)現(xiàn)(實(shí)現(xiàn)結(jié)果截圖)3. 系統(tǒng)發(fā)布與運(yùn)行第一步:在netbeans中進(jìn)行清理構(gòu)建在項(xiàng)目的dist文件夾中會(huì)出現(xiàn)第二步:通過“j2ewiz”對項(xiàng)目

4、進(jìn)行打包。第三步:打包軟件的第一步通過瀏覽項(xiàng)目找到第一步中的Employee。第四步:點(diǎn)擊下一步后選擇weindows窗口程序。第五步:點(diǎn)擊選擇就會(huì)出現(xiàn)右邊的窗口然后就是挑選出服務(wù)器點(diǎn)擊確定。第六步:第七步:第八步:這一步你可以選擇修改你所打包的名字。第九步:第十步:客戶端的操作跟服務(wù)器的是相同的,只有在第五步的選擇時(shí)是選擇的客戶端。最后的結(jié)果:四、 總結(jié)在本次實(shí)訓(xùn)當(dāng)中我覺得學(xué)到很多,給我的感覺也很不一樣,這么一個(gè)小項(xiàng)目就能如此復(fù)雜,一些細(xì)節(jié)上一步留神就會(huì)出錯(cuò)。這次實(shí)訓(xùn),任務(wù)是讓我們做一個(gè)簡易的基于Java語言的聊天室,雖說是個(gè)比較簡易的聊天工具,但是對于我來說無疑是一件非常困難的是。所有的界

5、面都需要用代碼實(shí)現(xiàn),對于用代碼構(gòu)建窗架雖說不是很困難,但也是很繁雜的一個(gè)過程。我們試訓(xùn)時(shí)間只有一周的左右,要想做得很完美的聊天室那是不太現(xiàn)實(shí),而且制作他們的還是我們這一群小菜鳥。我覺得,這樣的實(shí)訓(xùn)重要的不是要我們在這一周內(nèi)能做出多么完美的成果,而是自己在這一周內(nèi)能學(xué)到什么,更不是為了完成最終作業(yè)二實(shí)訓(xùn)。通過這次學(xué)習(xí),我學(xué)到了不少實(shí)際編程的知識。我剛開始很自信自己能順順利利編寫成功,但這一過程并不太順利。用了,兩天的時(shí)間做出了一個(gè)功能近似得模子,但總是發(fā)現(xiàn)和我要實(shí)現(xiàn)的即時(shí)通訊聊天功能相差甚遠(yuǎn)。后來我拋棄了那個(gè)例子,全部重寫,磕磕絆絆的不斷發(fā)現(xiàn)錯(cuò)誤,并改正它們,功夫不負(fù)有心人人,我的程序最后運(yùn)行成

6、功了。實(shí)訓(xùn)的時(shí)間是短暫的,實(shí)訓(xùn)中也難免會(huì)遇到許許多多的問題,所以也不可能在這么短的時(shí)間內(nèi)都解決。實(shí)訓(xùn)與平時(shí)的上課顯然不同,實(shí)訓(xùn)中老師不會(huì)也不可能仔細(xì)的講解每個(gè)知識點(diǎn),否則的話一個(gè)月都不知道夠不夠。實(shí)訓(xùn)考研的就是我們自己能不能在逆境中成長,獨(dú)立自主的完成老師下達(dá)的每個(gè)任務(wù),但有必要的是不懂得還是及時(shí)詢問老師或這尋求同學(xué)的幫助還活著上網(wǎng)查查資料也是可行的。實(shí)訓(xùn)中態(tài)度很重要,擺正自己的心態(tài),只有自己付出過,當(dāng)程序運(yùn)行成功時(shí)得那種喜悅才會(huì)令自己莫名的自豪感。眾所周知,互聯(lián)網(wǎng)從誕生以來,就開始影響著地球上的每一個(gè)角落,給予了人類一種全新的生活方式,隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,新興技術(shù)也是層出不窮,及時(shí)通訊

7、系統(tǒng)就是這么一種以聊天通訊形式為主的廣受歡迎的互聯(lián)網(wǎng)技術(shù)之一。轉(zhuǎn)眼間一周的實(shí)訓(xùn)就這樣過去了,這讓我對java的認(rèn)識又加深了,java語言是當(dāng)前最流行的語言之一,它純面向?qū)ο蟮恼Z言,封裝性好,靈活,對以后我們學(xué)習(xí)其他語言也起到一定的輔助作用。在設(shè)計(jì)的過程中了解到自己的知識還是比較有限,使得程序還不夠完善。回顧此次Java,至今仍感概很多,的確,從選題到定稿,從理論到實(shí)踐,整整一星期的日子里,可以說是苦多于甜,但是可以學(xué)到很多東西,同時(shí)不僅可以鞏固以前學(xué)的東西,而且學(xué)到了很多課本上學(xué)不到的東西,通過本次課程設(shè)計(jì),使得自己懂得理論和實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正掌握這門技術(shù),也提高了自己

8、獨(dú)立思考的能力,在設(shè)計(jì)的過程中,可以自己解決。真正體會(huì)到要將一門知識學(xué)的更深入,必須加強(qiáng)實(shí)踐,多練習(xí),才能發(fā)現(xiàn)問題所在。五、 附錄(系統(tǒng)代碼)1. 服務(wù)器端import .*;import java.io.*;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.util.logging.Level;import java.util.logging.Logger;public class NetChatServer extends JFrame static JTextArea jtaInputCh

9、at; JButton btnStart; JButton btnStop; JPanel pNorth; JScrollPane jspArea; ServerSocket ss = null; Socket s = null; DataInputStream dis = null; / static JTextArea tfdUser; public static void main(String args) new NetChatServer(); public NetChatServer() btnStart = new JButton(啟動(dòng)服務(wù)器); btnStop = new JB

10、utton(關(guān)閉服務(wù)器); pNorth = new JPanel(); jtaInputChat = new JTextArea(100,300); jspArea = new JScrollPane(jtaInputChat); /jspArea.getViewport().add(tfdUser); Container contentPane = this.getContentPane(); BorderLayout bl = new BorderLayout(); setLayout(bl); pNorth.add(btnStart); pNorth.add(btnStop); jta

11、InputChat=new JTextArea(15,30); jspArea.getViewport().add(jtaInputChat); contentPane.add(pNorth, BorderLayout.NORTH); contentPane.add(jspArea, BorderLayout.CENTER); EventAction ea = new EventAction(); btnStart.addActionListener(ea); btnStop.addActionListener(ea); this.setTitle(服務(wù)器端); this.setVisible

12、(true); this.setSize(300,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); class EventAction implements ActionListener public void actionPerformed(ActionEvent ae) if (ae.getSource() = btnStart) btnStart.setEnabled(false); btnStop.setEnabled(true); jtaInputChat.append(服務(wù)器已啟動(dòng)n); jtaInputChat.

13、setEditable(false); ServerThread st=new ServerThread(); st.start(); if (ae.getSource() = btnStop) /jtaInputChat.setText(); jtaInputChat.append(服務(wù)器已關(guān)閉n); btnStart.setEnabled(true); btnStop.setEnabled(false); 2. 客戶端import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event

14、.*;import java.util.logging.Level;import java.util.logging.Logger;public class NetClient extends JFrame implements ActionListener, Runnable JLabel lblUser, lblServerAdress, lblServerPort; JTextField tfdUser, tfdSendMessage, tfdServerAdress, tfServerPort; JButton btnIn, btnOut, btnSend; JTextArea taM

15、essages; String strip, strport; DataOutputStream dos; DataInputStream dis; Socket s; Thread t; public static void main(String args) new NetClient(); public NetClient() lblUser = new JLabel(用戶名); tfdUser = new JTextField(10); btnIn = new JButton(進(jìn)入聊天室); btnOut = new JButton(退出聊天室); btnOut.setEnabled(

16、false); tfdSendMessage = new JTextField(20); btnSend = new JButton(發(fā)送); taMessages = new JTextArea(10, 40); taMessages.setEditable(false); lblServerAdress = new JLabel(服務(wù)器地址); lblServerPort = new JLabel(服務(wù)器端口); tfdServerAdress = new JTextField(10); tfServerPort = new JTextField(10); tfdServerAdress.

17、setEnabled(false); tfServerPort.setEnabled(false); Container contentPane = this.getContentPane(); setLayout(new BorderLayout(); JPanel jpEast = new JPanel(new GridLayout(4, 1); jpEast.add(lblServerAdress); jpEast.add(tfdServerAdress); jpEast.add(lblServerPort); jpEast.add(tfServerPort); contentPane.

18、add(jpEast, BorderLayout.EAST); JScrollPane jspCentre = new JScrollPane(taMessages); contentPane.add(jspCentre, BorderLayout.CENTER); JPanel jpSouth = new JPanel(); jpSouth.add(tfdSendMessage); jpSouth.add(btnSend); contentPane.add(jpSouth, BorderLayout.SOUTH); JPanel jpNorth = new JPanel(); jpNorth

19、.add(lblUser); jpNorth.add(tfdUser); jpNorth.add(btnIn); jpNorth.add(btnOut); contentPane.add(jpNorth, BorderLayout.NORTH); btnIn.addActionListener(this); btnOut.addActionListener(this); btnSend.addActionListener(this); this.pack(); this.setVisible(true); this.setTitle(客戶端); this.setSize(500, 400);

20、this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ConnectServer(); void ConnectServer() try s = new Socket(, 8888); InetAddress ip = s.getInetAddress(); strip = String.valueOf(ip); strport = String.valueOf(s.getPort(); tfdServerAdress.setText(strip); tfServerPort.setText(strport); Output

21、Stream os = s.getOutputStream(); dos = new DataOutputStream(os); InputStream is = s.getInputStream(); dis = new DataInputStream(is); catch (UnknownHostException ex) System.out.println(找不到主機(jī)!); catch (IOException ex) System.out.println(傳輸異常); public void actionPerformed(ActionEvent ae) if (tfdUser.ge

22、tText().equals() tfdSendMessage.setEditable(false); else if (ae.getSource() = btnIn) if (!tfdUser.getText().equals() try tfdSendMessage.setEditable(true); dos.writeUTF(tfdUser.getText() + 進(jìn)入聊天室n); dos.flush(); tfdUser.setEditable(false); btnIn.setEnabled(false); btnOut.setEnabled(true); btnSend.setE

23、nabled(true); t = new Thread(Runnable) this); t.start(); catch (IOException ex) System.out.println(進(jìn)入聊天室發(fā)送失敗); else JOptionPane.showMessageDialog(null, 請輸入用戶名!); else if (ae.getSource() = btnOut) try tfdSendMessage.setEditable(false); dos.writeUTF(tfdUser.getText() + 退出聊天室n); btnOut.setEnabled(false

24、); dos.flush(); catch (IOException ex) Logger.getLogger(NetClient.class.getName().log(Level.SEVERE, null, ex); else if (ae.getSource() = btnSend) if (!tfdSendMessage.getText().equals() try dos.writeUTF(tfdUser.getText() + 對大家說: + tfdSendMessage.getText() + n); dos.flush(); tfdSendMessage.setText(nul

25、l); catch (IOException ex) Logger.getLogger(NetClient.class.getName().log(Level.SEVERE, null, ex); else JOptionPane.showMessageDialog(null, 不能為空!); public void run() while (true) try if (dis != null) taMessages.append(dis.readUTF(); catch (IOException ex) System.out.println(退出聊天室,讀取數(shù)據(jù)出錯(cuò)); System.exi

26、t(0); 線程一ServerThread:import java.io.*;import .*;import java.util.ArrayList;import java.util.logging.Level;import java.util.logging.Logger;public class ServerThread extends Thread ServerSocket ss=null; DataInputStream dis=null; DataOutputStream dos=null; Socket s=null; ArrayList NetClient; ArrayList

27、 taMessages; public ServerThread() try ss = new ServerSocket(8888); NetClient = new ArrayList(); taMessages = new ArrayList(); catch(IOException ex) Logger.getLogger(ServerThread.class.getName().log(Level.SEVERE, null, ex); BroadCastThread bct = new BroadCastThread(this); bct.start(); public void ru

28、n() try while (true) s = ss.accept(); dis = new DataInputStream(s.getInputStream(); dos = new DataOutputStream(s.getOutputStream(); ClientThread ct = new ClientThread(dis, dos, this); ct.start(); synchronized (NetClient) NetClient.add(ct); catch (IOException ex) System.out.println(連接客戶機(jī)失??! + ex.getM

29、essage(); System.exit(0); finally try if (dis != null) dis.close(); if (s!= null) s.close(); if (ss != null) ss.close(); catch (IOException ex) 線程二ClientThread:import .Socket;import static Text2.NetChatServer.jtaInputChat;import com.sun.corba.se.spi.activation.Server;import java.io.DataInputStream;i

30、mport java.io.DataOutputStream;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;public class ClientThread extends Thread DataInputStream dis=null; DataOutputStream dos=null; Socket s=null; ServerThread st=null; public ClientThread(DataInputStream dis, DataOutputStream dos, ServerThread st) this.dis = dis;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論