版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 課 程 設 計 報 告</p><p> 課程名稱 Java網絡編程 </p><p> 課題名稱 java聊天室課程設計 </p><p> 專 業(yè) 計算機科學與技術 </p><p> 班 級 計算機0803
2、 </p><p> 課 程 設 計 任 務 書</p><p> 課程名稱 Java網絡編程 </p><p> 課 題 java聊天室課程設計 </p><p> 一 課程設計的任務和具體要求</p><p> 該項目實訓的目的主要是對所學網絡知識進行梳理、鞏固和提高。通過項目實訓
3、熟悉系統(tǒng)開發(fā)的基本流程,掌握系統(tǒng)開發(fā)的各個環(huán)節(jié)的要點,培養(yǎng)系統(tǒng)分析和設計的能力,鍛煉團隊合作精神。</p><p><b> 具體要求:</b></p><p> 課程設計任務下達后,研究系統(tǒng)的功能、性能和界面要求,具體安排如下:</p><p> 1、下達項目實訓任務,進行需求分析,形成需求分析報告。</p><p&
4、gt; 2、進行總體設計和詳細設計,形成詳細設計報告,進行系統(tǒng)模塊開發(fā)。</p><p> 3、全部上機進行系統(tǒng)模塊開發(fā)和模塊測試。</p><p> 4、系統(tǒng)集成和集成測試,撰寫系統(tǒng)操作說明書和項目實訓總結報告。</p><p> 二 課程設計所需軟件、硬件等</p><p> 軟件:Windows 2000以上的操作系統(tǒng)、JDK
5、開發(fā)包、eclipse開發(fā)環(huán)境</p><p> 硬件:機房臺式計算機</p><p><b> 目 錄</b></p><p> 一 課程設計的目的……………………………………………1</p><p> 二 需求分析………………………………………………….2</p><p> 三 系
6、統(tǒng)設計………………………………………………….3</p><p> 四 詳細設計………………………………………………….5</p><p> 五 總結……………………………………………………….9</p><p> 六 參考文獻.………………………………………………..10</p><p> 七 附錄(源代碼)………………………………
7、…………..11</p><p><b> 一、課程設計的目的</b></p><p> 通過此項目實訓——JAVA聊天室的設計,實踐、總結、回顧了網絡編程思想以及編程方法,并通過編寫程序來掌握Java語言編程技巧,將學習到的知識融會貫通,同時提高調試程序的能力,養(yǎng)成良好的編程習慣,并增強對程序設計整體思路的把握,理論與時間相結合。本文的主要工作集中在:該課程基于
8、C/S模式,客戶機向服務器發(fā)聊天請求,服務器應答并能顯示客戶機發(fā)過來的信息。當用戶聊天時,將當前用戶名、聊天對象、聊天,內容、聊天語氣和是否私聊進行封裝,然后與服務器建立Socket連接,再用對象輸出流包裝Socket的輸出流將聊天信息對象發(fā)送給服務器端。當用戶發(fā)送聊天信息時,服務端將會收到客戶端用Socket傳輸過來的聊天信息對象,然后將其強制轉換為Chat對象,接收用戶的聊天信息是由多線程技術實現的,因為客戶端必須時時關注更新服務器
9、上是否有最新消息,當每次用戶接收到聊天信息后將會開始分析聊天信息然后將適合自己的信息人性化地顯示在聊天信息界面上。</p><p> 進一步培養(yǎng)學生面向對象程序設計的思想,加深對面向對象程序設計四大特性的理解,針對JAVA語言中的重點和難點內容進行訓練,獨立完成有一定工作量的程序設計任務,同時強調好的程序設計風格。</p><p><b> 需求分析</b><
10、;/p><p> 隨著計算機網絡日新月異的發(fā)展,人們的交流方式越來越多,傳統(tǒng)的交流方式,如:信件、電報、電話等已經難以滿足人們的交流要求,在互聯(lián)網上即時的和好友取得聯(lián)系,已經成為當今社會人們主流的聯(lián)系方式。因此,兩臺計算機之間進行即時通訊、發(fā)送文件等交流方式已經成為必然潮流。因此出現了QQ等聊天工具,然而QQ等聊天工具雖然方便、實用,但是,娛樂功能太多,有很多吸引人的娛樂功能,從一定程度上來說,是一種娛樂工具,不
11、能作為用于即時通訊、文件共享的專用工具。目前,用于實現單一的即時通訊、文件共享的軟件實在太少,而且,它們中大部分都是絕對的C/S模式,對遠程服務器有非常大的依賴性,沒有徹底實現點對點的交流。為此,我們決定開發(fā)一個專用于實現兩臺計算機之間即時通訊、文件共享的軟件,以方便兩臺計算機之間信息的交流。本軟件屬于點對點連接的,在連接并通信時,尤其是近程的即時通訊,徹底的脫離了遠程的服務器,避免了和遠程服務器連接時過多的浪費網絡資源。并且避免了服務
12、器忙或與服務器無法連接時,浪費過多時間用于和服務器建立連接!因此,這個軟件是極具適應性和實用性的即時通訊軟件.</p><p><b> 三、系統(tǒng)設計</b></p><p> 系統(tǒng)可以采用任何一種流行的,Java支持的數據庫,本系統(tǒng)采用了Microsoft公司的Access作為后臺數據庫。通過對現在流行的一些Icq的參考,建立數據庫,名為chart,數據庫共建立
13、一個表,表中基本信息包括編號,uername,password。</p><p> (1)用戶的基本信息表(表名userlilst)</p><p> 序號字段名含義數據類型NULL</p><p> 1編號用戶的編號int</p><p> 2username用戶名文本</p><p>
14、; 3password用戶的密碼文本 </p><p> 其中編號字段為自動增加。 </p><p> ◆ 服務器端程序如下: </p><p> 服務器與客戶間通過套接口Socket(TCP)連接。在java中使用套接口相當簡單,Java API為處理套接口的通信提供了一個類java.net.Socket.,使得編寫網絡應用程序相對容易.服務器采用
15、多線程以滿足多用戶的請求,通過JDBC與后臺數據庫連接,并通過創(chuàng)建一個ServerSocket對象來監(jiān)聽來自客戶的連接請求,默認端口為8888,然后無限循環(huán)調用accept()方法接受客戶程序的連接。</p><p> ◆ 客戶端程序如下 :</p><p> 客戶通過Socket(InetAddress,port)建立與服務器的連接。服務器與客戶都通過構造BufferedReader
16、,PrintWriter來建立輸入輸出流,然后雙方通過該輸入輸出流來相互傳遞信息,一旦收到客戶方的連接請求,服務器accept()方法返回一個新建的Socket對象??蛻舳巳缓笙蚍掌靼l(fā)送消息,比如登錄,服務器收到來自客戶的請求后,針對不同的消息處理請求, 雖然UDP不可靠但是對于icq可靠性并不太重要,而且UDP快速,所以客戶間發(fā)送信息通過UDP。用戶登錄時通過類DatagramPacket和DatagramSocket創(chuàng)建UDP包括
17、其本地接受端口以及發(fā)送端口。</p><p><b> 四、詳細設計</b></p><p> 圖1.1 :服務器端頁面</p><p> 圖1.2 :程序運行界面</p><p> 圖1.3 :注冊頁面</p><p> 圖1.4 :登陸頁面</p><p>
18、 圖1.5:網友1頁面</p><p> 圖1.6:網友2頁面</p><p> 圖1.7:網絡涂鴉板顏色面板</p><p> 圖1.8:聊天記錄面板</p><p> 圖1.9:數據庫頁面</p><p> 服務器端:(Windows平臺)首先應有java環(huán)境jdk,建議采用jdk1.5。然后安裝Acce
19、ss數據庫,建立數據庫chart,并且建立表userlist。然后在控制面板中的ODBC數據源中設置用戶DSN數據源TrioMotors 建立與數據庫的連接。然后運行程序即可。 </p><p> 客戶端:只要有有java環(huán)境jdk就可以建議jdk1.5。然后運行程序及可。 </p><p><b> 五、 總結</b></p><p>
20、 兩周的課程設計結束了,我的收獲很大。通過課程設計的編程和對編程過程中遇到的問題的思考,有效的提高了我對數據結構的認識和理解,切實的提高了我的編程能力,補全了我的不足。通過這次課程設計,我鞏固所了學過的知識,能用JAVA熟練地運用其中的一些,進一步掌握了各個指令的功能是轉向。課程設計是對我們所學的這些東西一個綜合的運用。在整個程序的編寫中,調試占了很大部分的時間。要想寫好程序,必須認真對待代碼的每一個細節(jié),還必須熟練的掌握各種命令,這對
21、程序的調試是非常重要的。通過這次實際動手能力的培養(yǎng),我進一步熟悉了使用方法,基本達到了能獨立閱讀、編制和調試一定規(guī)模的水平。課程設計是對自己所學知識掌握程度最好的檢驗,特別是對于一些細節(jié)問題??荚囘€并不能完全的說明什么,因為考題都是一些單個的問題,大多只是知識的某一方面。而課程設計不同,我們要用到很多的單個知識點,把他們綜合起來運用到自己的課題當中。學了一個學期的數據結構,現在終于迎來了課程設計,當然是一個很好的鍛煉自己的機會。<
22、/p><p> 在本次的課程設計也發(fā)現了自己很多的缺點不足之處,對于一些細節(jié)性的問題老犯錯,特別是一個標點的錯誤,很急人。對于有些知識掌握的不行,有的是模模糊糊的不牢靠,雖然有的東西考試考過,但當它用到實際問題的時候,往往不知道用哪,放哪。實踐出真知。課程設計是個實踐,雖然實際不長,但給我們對知識的運用,利用都有了很好的發(fā)揮。人多力量大這句話是真理啊,不懂得地方問同學,不會的地方也問同學,自己努力的同時跟別人共同進
23、步,這就是合作,學會合作是我們以后必備的重要的一項人際技能。一個程序的完成需要不斷地修改才能夠得到完善,人生正如那程序一樣,只有不斷地努力、奮斗、勇往直前,才能夠完善自己,做最好的自己。</p><p> 最后感謝同學的幫助,感謝老師的指導!</p><p><b> 六、參考文獻</b></p><p> 1.Java2實用教程(第三版
24、 ) 編著者 耿祥義 張躍平 清華大學出版社 2006</p><p> 2.Java編程設計 編著者 劉海杰 中國鐵道出版社 2006</p><p> 3.Java網絡編程精解 編著者 孫衛(wèi)琴 電子工業(yè)出版社 </p><p><b> 七、附錄</b></p><p><b> 服
25、務器端代碼:</b></p><p> public static int port=8888;</p><p> ServerSocket server;</p><p> Socket client=null;</p><p> BufferedReader cin=null;</p><p>
26、 PrintWriter cout=null;</p><p> Thread chartThread=null;</p><p> JButton runButton=new JButton("運行");</p><p> JButton stopButton=new JButton("停止");</p>
27、<p> JButton exitButton=new JButton("退出");</p><p> JButton messageButton=new JButton("發(fā)送消息");</p><p> JTextField serMessage=new JTextField("",25);</p&g
28、t;<p> JPanel p1=new JPanel();</p><p> JPanel p2=new JPanel();</p><p> JScrollPane messageScrollPane;</p><p> JTextArea message=new JTextArea();</p><p> boo
29、lean isRunning=false;</p><p> public Server(){</p><p> super("網絡聊天服務器");</p><p> p1.add(runButton);</p><p> p1.add(stopButton);</p><p> p1.a
30、dd(exitButton);</p><p> runButton.addActionListener(this);</p><p> stopButton.addActionListener(this);</p><p> exitButton.addActionListener(this);</p><p> messageBu
31、tton.addActionListener(this);</p><p> p2.add(serMessage);</p><p> p2.add(messageButton);</p><p> messageScrollPane=new JScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDE
32、D,</p><p> JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);</p><p> this.getContentPane().add(p1,"North");</p><p> this.getContentPane().add(p2,"South");</p>
33、;<p> this.getContentPane().add(messageScrollPane,"Center");</p><p> this.setSize(400,300);</p><p> this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>
34、 this.setVisible(true);}</p><p> public void actionPerformed(ActionEvent e)</p><p> {if(e.getSource()==runButton){</p><p> chartThread=new Thread(this);</p><p> cha
35、rtThread.start();</p><p> runButton.setVisible(false);</p><p> message.append("服務器啟動"+"\n");</p><p> }else if (e.getSource()==stopButton)</p><p>
36、<b> {</b></p><p> chartThread=null;</p><p> runButton.setVisible(true);</p><p> if(cout!=null) cout.println("stop");</p><p><b> try{<
37、;/b></p><p> if(server!=null) </p><p> server.close();</p><p> }catch(Exception exp){}</p><p> message.append("服務器停止"+"\n");</p><p
38、> }else if(e.getSource()==exitButton)</p><p><b> {</b></p><p> chartThread=null;</p><p> if(cout!=null) cout.println("exit");</p><p> Syst
39、em.exit(0);</p><p> }else if (e.getSource()==messageButton)</p><p><b> {</b></p><p> if(chartThread!=null)</p><p><b> {</b></p><p
40、> sendMessage(serMessage.getText());</p><p> message.append("發(fā)送:"+serMessage.getText()+"\n");</p><p><b> }</b></p><p><b> }</b><
41、;/p><p><b> }</b></p><p> public void run()</p><p><b> {</b></p><p><b> try{</b></p><p> server=new ServerSocket(port
42、);</p><p> while(chartThread!=null)</p><p><b> {</b></p><p> client=server.accept() ;</p><p> cin=new BufferedReader(new InputStreamReader(client.getInp
43、utStream()));</p><p> cout=new PrintWriter(client.getOutputStream(),true);</p><p> String username;</p><p> String password;</p><p> username=cin.readLine();</p&
44、gt;<p> password=cin.readLine();</p><p> if(userOK(username,password))</p><p><b> {</b></p><p> message.append("客戶:"+username+"進入\n");<
45、/p><p> cout.println("ok");</p><p> String aline;</p><p> while((aline=cin.readLine() )!=null&&chartThread!=null)</p><p><b> {</b></p&
46、gt;<p> if(aline.equals("exit"))</p><p><b> {</b></p><p> message.append("客戶:"+username+"已退出!\n");</p><p><b> break;</b
47、></p><p> }else message.append(username+"說:"+aline+"\n");</p><p><b> }</b></p><p> }else cout.println("error");</p><p>
48、;<b> }</b></p><p> cin.close() ;</p><p> cout.close() ;</p><p> client.close() ;</p><p> server.close();</p><p><b> }</b><
49、/p><p> catch(Exception e)</p><p><b> {</b></p><p> System.out.println(e);</p><p><b> }</b></p><p><b> }</b></p>
50、;<p> public boolean userOK(String username,String password)</p><p><b> {</b></p><p> boolean ok=false;</p><p><b> try {</b></p><p>&
51、lt;b> //①加載驅動程序</b></p><p> Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</p><p><b> }</b></p><p> catch (ClassNotFoundException e) {</p>
52、<p> //驅動程序加載不成功,打印錯誤信息并退出</p><p> System.out.println("Can not find driver " );</p><p> System.exit( -1);</p><p><b> }</b></p><p> Conne
53、ction con;</p><p><b> try {</b></p><p> //②獲得jdbc 連接</p><p> con = DriverManager.getConnection("jdbc:odbc:TrioMotors", "user", "");</
54、p><p> //③創(chuàng)建Statement對象</p><p> Statement stmt = con.createStatement();</p><p> //④得到查詢結果集</p><p> String sql = "select * from userlist where username='"
55、 </p><p> + username + "'";</p><p> ResultSet rs = stmt.executeQuery(sql);</p><p><b> //列印結果集</b></p><p> while(rs.next())</p><
56、p><b> {</b></p><p> String ps = rs.getString("password");</p><p> if (ps.equals(password)) {</p><p><b> //驗證通過</b></p><p><b
57、> ok=true;</b></p><p><b> }</b></p><p><b> }</b></p><p> //⑤關閉數據庫連接</p><p> rs.close();</p><p> stmt.close();</p&
58、gt;<p> con.close();</p><p><b> }</b></p><p> catch (SQLException sqe) {</p><p> sqe.printStackTrace();</p><p><b> }</b></p>
59、<p> return ok;</p><p><b> }</b></p><p> public void sendMessage(String message)</p><p><b> {</b></p><p> cout.println(message);</p
60、><p><b> }</b></p><p> public static void main(String args[])</p><p><b> {</b></p><p> Server my=new Server();</p><p><b> }
61、</b></p><p><b> }</b></p><p><b> 客戶端代碼:</b></p><p> public class Client extends JFrame implements ActionListener,Runnable</p><p><b&
62、gt; {</b></p><p> public static int port=8888;</p><p> ServerSocket server;</p><p> Socket client;</p><p> BufferedReader cin;</p><p> PrintWri
63、ter cout;</p><p> private JLabel userlabel=new JLabel("用戶名");;</p><p> private JLabel passwordlabel=new JLabel("密碼");</p><p> private JTextField username=new
64、JTextField(10);</p><p> private JPasswordField password=new JPasswordField(10);</p><p> private JButton loginButton=new JButton("登錄");</p><p> private JButton exitButto
65、n=new JButton("退出");</p><p> private JPanel p1=new JPanel();</p><p> JButton messageButton=new JButton("發(fā)送消息");</p><p> JTextField clientMessage=new JTextFiel
66、d("",25);</p><p> JPanel p2=new JPanel();</p><p> JScrollPane messageScrollPane;</p><p> JTextArea message=new JTextArea();</p><p> Thread chart=null;<
67、/p><p> public Client()</p><p><b> {</b></p><p> super("網絡聊天客戶端");</p><p> p1.add(userlabel);</p><p> p1.add(username);</p>
68、<p> p1.add(passwordlabel);</p><p> p1.add(password);</p><p> p1.add(loginButton);</p><p> p1.add(exitButton);</p><p> loginButton.addActionListener(this);<
69、;/p><p> exitButton.addActionListener(this);</p><p> this.getContentPane().add(p1,"North");</p><p> p2.add(clientMessage);</p><p> p2.add(messageButton);<
70、/p><p> messageButton.addActionListener(this);</p><p> messageScrollPane=new JScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,</p><p> JScrollPane.HORIZONTAL_SCROLLBAR_A
71、S_NEEDED);</p><p> this.getContentPane().add(p2,"South");</p><p> this.getContentPane().add(messageScrollPane,"Center");</p><p> this.setSize(500,300);</p&
72、gt;<p> this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p><b> }</b></p><p> public void actionPerformed(ActionEvent e){</p><p> if(e.getSource()==lo
73、ginButton){</p><p> String pword=new String(password.getPassword());</p><p> if(loginServer(username.getText(),pword))</p><p><b> {</b></p><p> chart=ne
74、w Thread(this);</p><p> chart.start();</p><p><b> }else{</b></p><p> JOptionPane.showMessageDialog(null,"user name or password error!");</p><p>
75、;<b> }</b></p><p> }else if(e.getSource()==exitButton)</p><p><b> {</b></p><p> cout.println("exit");</p><p> chart=null;</p&g
76、t;<p><b> }</b></p><p> if (e.getSource()==messageButton)</p><p><b> {</b></p><p> sendMessage(clientMessage.getText());</p><p> mes
77、sage.append("發(fā)送:"+clientMessage.getText()+"\n");</p><p><b> }</b></p><p><b> }</b></p><p> public boolean loginServer(String username,
78、String password)</p><p><b> {</b></p><p><b> try{</b></p><p> client=new Socket("localhost",8888);</p><p> cin=new BufferedReader(
79、new InputStreamReader(client.getInputStream()));</p><p> cout=new PrintWriter(client.getOutputStream(),true);</p><p> cout.println(username);</p><p> cout.println(password);</
80、p><p> String readLine=cin.readLine();</p><p> if(readLine.equals("ok"))</p><p><b> {</b></p><p> message.append("連接到服務器!\n");</p>
81、;<p> return true;</p><p><b> }</b></p><p> }catch(Exception e)</p><p><b> {</b></p><p><b> }</b></p><p>
82、return false; </p><p><b> }</b></p><p> public void run()</p><p><b> {</b></p><p> String aline;</p><p><b> try{</b&
83、gt;</p><p> while(chart!=null&&(aline=cin.readLine() )!=null)</p><p><b> {</b></p><p> if(aline.equals("exit")||aline.equals("stop"))</
84、p><p><b> {</b></p><p> message.append("服務器已斷開!重新登錄!\n");</p><p><b> break;</b></p><p> }else message.append("服務器說:"+aline+
85、"\n");</p><p> Thread.sleep(200);</p><p><b> }</b></p><p> cin.close() ;</p><p> cout.close() ;</p><p> client.close() ;</p&g
86、t;<p><b> }</b></p><p> catch(Exception e){}</p><p><b> }</b></p><p> public void sendMessage(String mes)</p><p><b> {</b&g
87、t;</p><p> cout.println(mes);</p><p><b> }</b></p><p> public static void main(String args[])</p><p><b> {</b></p><p> Client
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網絡編程課程設計-java聊天室
- java課程設計--聊天室系統(tǒng)
- java課程設計---聊天室系統(tǒng)
- java課程設計之簡單聊天室
- tcp課程設計--網絡聊天室
- 網絡編程課程設計---網絡聊天室
- java課程設計報告---利用java實現簡單聊天室
- java網絡聊天室畢業(yè)課程設計報告(內附代碼)
- 基于java網絡聊天室設計
- java聊天室設計
- java課程設計---java聊天室的系統(tǒng)的設計與開發(fā)
- web課程設計—— 聊天室
- 軟件課程設計報告---簡易網絡聊天室
- 基于java的網絡聊天室
- java網絡聊天室課程設計說明書(含源程序)
- java聊天室程序(java)
- java課程設計---java聊天室的系統(tǒng)的設計與開發(fā)(含代碼)
- java課程設計---java聊天室的系統(tǒng)的設計與開發(fā)(含代碼)
- 網絡編程課程設計報告--基于linux網絡聊天室設計
- Java課程設計---JAVA聊天室的系統(tǒng)的設計與開發(fā)(含代碼).doc
評論
0/150
提交評論