版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)說明書</b></p><p> 課程名稱: Java程序設(shè)計(jì) </p><p> 專 業(yè): 班級(jí): </p><p> 設(shè) 計(jì) 人:
2、 </p><p> 2015年 1月 13 日</p><p><b> 目 錄</b></p><p> 需求分析說明 …………………………………………………………11.1背景…………………………………………………………11.2 功能要求…………………………………
3、…………………………11.3 運(yùn)行環(huán)境……………………………………………………………11.4 功能實(shí)現(xiàn)…………………………………………………………1</p><p> 概要設(shè)計(jì)說明…………………………………………………………22.1 模塊調(diào)用圖……………………………………………………………22.2 套接字連接示意圖……………………………………………………22.3 主要函數(shù)聲明…………………………………
4、………………………2</p><p> 詳細(xì)設(shè)計(jì)說明…………………………………………………………43.1功能描述………………………………………………………43.2 主要功能詳述………………………………………………………43.3 主要代碼分析…………………………………………………………5</p><p> 調(diào)試分析…………………………………………………………84.1遇到的問題……
5、………………………………………………84.2 測(cè)試結(jié)果分析…………………………………………………………9</p><p> 用戶使用說明………………………………………………………9</p><p> 課程設(shè)計(jì)總結(jié)………………………………………………………12</p><p> 7 附錄…………………………………………………………12</p>&
6、lt;p><b> 1 需求分析說明</b></p><p><b> 1.1 背景</b></p><p> 在當(dāng)今的信息時(shí)代,越來越多的聊天工具被應(yīng)用,Java語(yǔ)言是當(dāng)今流行的網(wǎng)絡(luò)編程語(yǔ)言,它具有面向?qū)ο?、與平臺(tái)無關(guān)、安全、多線程等特點(diǎn)。此課程設(shè)計(jì) 的題目是聊天小程序,鞏固所學(xué)的Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯基本功,拓
7、寬常用類庫(kù)的應(yīng)用。使我們把所學(xué)課程及相關(guān)知識(shí)加以融會(huì)貫通,全面掌握J(rèn)ava語(yǔ)言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。</p><p><b> 1.2 功能要求</b></p><p> 1、使用圖形用戶界面。</p><p> 2、能實(shí)現(xiàn)一個(gè)聊天室中多人聊天。</p><p><b> 3、可以兩人私聊
8、。</b></p><p><b> 1.3 運(yùn)行環(huán)境</b></p><p> 本程序基于Java和Eclipse開發(fā)環(huán)境,可以在一般的裝有Windows系統(tǒng)的主機(jī)上運(yùn)行。</p><p><b> 1.4 功能實(shí)現(xiàn)</b></p><p> 程序?qū)崿F(xiàn)了聊天室的基本功能,其中有
9、:</p><p><b> 啟動(dòng)服務(wù)器。</b></p><p><b> 進(jìn)入客戶端界面。</b></p><p><b> 登錄聊天室。</b></p><p><b> 發(fā)送信息。</b></p><p><b
10、> 關(guān)閉服務(wù)器。</b></p><p><b> 輸入昵稱。</b></p><p> 發(fā)送消息并收到其他客戶的消息。</p><p><b> 2 概要設(shè)計(jì)說明</b></p><p><b> 2.1 模塊調(diào)用圖</b></p>
11、<p> 2.2 套接字連接示意圖</p><p> 2.3 主要函數(shù)聲明</p><p> 1、Socket的構(gòu)造方法如下:</p><p> Socket(String host,int port)</p><p> 參數(shù)host是服務(wù)器的IP地址,port是一個(gè)端口號(hào)。</p><p> 2
12、、ServerSocket的構(gòu)造方法如下:</p><p> ServerSocket(int port)</p><p> port是一個(gè)端口號(hào)。port必須和客戶呼叫的端口號(hào)相同</p><p> 當(dāng)建立時(shí)可能發(fā)生IOException異常,因此應(yīng)像下面那樣建立到服務(wù)器的套接字連接:</p><p><b> Try&l
13、t;/b></p><p><b> {</b></p><p> Socket myscoket=new Socket(“http://192.168.0.78”,1880);</p><p><b> ?。?lt;/b></p><p> Catch(IOException e){}<
14、;/p><p> 當(dāng)建立服務(wù)器時(shí)可能發(fā)生IOException異常,因此,應(yīng)像下面那樣建立接收客戶的服務(wù)器套接字:</p><p><b> Try</b></p><p><b> {</b></p><p> ServerSocket server_scoket=new ServerSock
15、et(1880);</p><p><b> }</b></p><p> Catch(IOException e){}</p><p> 比如1880端口已被占用時(shí),就會(huì)發(fā)生IOException異常。</p><p> 當(dāng)服務(wù)器的ServerScoket對(duì)象server_socket建立后,就可以使用acce
16、pt()方法接收客戶的套接字連接呼叫,代碼如下:</p><p> Server_socket.accept();</p><p> 客戶使用Socket類不帶參數(shù)的構(gòu)造方法Socket()創(chuàng)建一個(gè)套接字對(duì)象,該對(duì)象需調(diào)用</p><p> Public void connect(SocketAddress endpoint) throws IOExcepti
17、on</p><p> 請(qǐng)求和參數(shù)SocketAddress指定地址的套接字建立連接,為了使用connect方法,可以使用SocketAddress的子類InetSocketAddress建立一個(gè)對(duì)象,InetSocketAddress的構(gòu)造方法如下:</p><p> Public InetSocketAddress(InetAddress addr,int port)</p&
18、gt;<p><b> 3 詳細(xì)設(shè)計(jì)說明</b></p><p><b> 3.1 功能描述</b></p><p> 聊天程序分為服務(wù)器端和客戶端兩部分,服務(wù)端程序主要負(fù)責(zé)偵聽客戶端發(fā)來的消息,客戶端需要登陸到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。</p><p><b> 服務(wù)器:</
19、b></p><p> 在特定端口上進(jìn)行偵聽,等待客戶端連接。</p><p> 向已經(jīng)連接到服務(wù)器端的 用戶發(fā)送系統(tǒng)消息。</p><p> 當(dāng)停止服務(wù)時(shí),斷開所以的用戶連接。</p><p> 系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。</p><p><b> 客戶端:</b></p&g
20、t;<p> 連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。</p><p> 當(dāng)服務(wù)器端開啟后,用戶可以發(fā)表聊天信息。</p><p> 用戶可以向所有人發(fā)送消息。</p><p> 系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。</p><p> 3.2 主要功能詳述</p><p> 3.2.1 客戶建立連接到服務(wù)器的套
21、接字對(duì)象</p><p> 1、當(dāng)套接字連接mysocket建立后,可以想象一條通信“線路”已經(jīng)建立起來。mysocket可以使用getInputStream()方法獲得一個(gè)輸入流,然后用這個(gè)輸入流讀取服務(wù)器放入“線路”的信息。mysocket還可以使用getOutputStream()方法獲得一個(gè)輸出流,然后用這個(gè)輸出流將信息寫入“線路”。</p><p> 2、在實(shí)際編寫程序時(shí),把
22、mysocket使用getInputStream()方法獲得的輸入流接到另一個(gè)數(shù)據(jù)流上,然后就可以從這個(gè)數(shù)據(jù)流讀取服務(wù)器來的信息,之所以這樣是因?yàn)楹竺鍰ataInputStream流有更好的從流中讀取信息的方法。</p><p> 3、同樣把mysocket使用getOutputStream()方法得到的輸出流接到另一個(gè)DataOutputStream數(shù)據(jù)流上,然后向這個(gè)數(shù)據(jù)流寫入信息,發(fā)送給服務(wù)器端,之所以這
23、樣做也是因?yàn)楹竺娴腄ataOutputStream流有更好的向流中寫入信息的方法。 </p><p> 3.2.2 ServerSocket類</p><p> 1、客戶負(fù)責(zé)建立客戶到服務(wù)器的套接字連接,即客戶負(fù)責(zé)呼叫。因此服務(wù)器必須建立一個(gè)等待接收客戶的套接字的ServerSocket對(duì)象。ServerSocket的構(gòu)造方法如下:</p><p> Serv
24、erSocket(int port)</p><p> port是一個(gè)端口號(hào)。port必須和客戶呼叫的端口號(hào)相同</p><p> 2、所謂接收客戶的套接字連接就是accept()方法會(huì)返回一個(gè)和客戶端Socket對(duì)象相連接的Socket對(duì)象,服務(wù)器端的這個(gè)Socket對(duì)象sc使用getOutputStream()方法獲得的輸出流將指向客戶端Socket對(duì)象myscoket使用getI
25、nputStream()方法獲得的那個(gè)輸入流;同樣,服務(wù)器端的這個(gè)Socket對(duì)象sc使用使用的 getInputStream()方法獲得的輸入流將指向客戶端Socket對(duì)象myscoket使用getOutputStream()方法獲得的那個(gè)輸出流 。</p><p> 3、連接建立以后,服務(wù)器端的套接字對(duì)象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對(duì)象,該對(duì)象含有客戶端的IP
26、地址和域名。同樣,客戶端的套接字對(duì)象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對(duì)象,該對(duì)象含有服務(wù)器端的IP地址和域名。</p><p> 雙方通信完畢后,應(yīng)使用close()方法關(guān)閉套接字連接。</p><p> 3.2.3 把套接字連接放在一個(gè)線程里</p><p> 需要注意的是,從套接字連接中讀取數(shù)據(jù)與從文件中讀取數(shù)據(jù)有
27、很大的不同。盡管兩者都是輸入流,但從文件中讀取數(shù)據(jù)時(shí),所有的數(shù)據(jù)都已經(jīng)在文件上了,而使用套接字連接時(shí),可能在另一端數(shù)據(jù)發(fā)送出來之前,就已經(jīng)開始試著讀取了,這時(shí),就會(huì)堵塞本線程,直到該讀取方法成功讀取信息,本線程才繼續(xù)執(zhí)行后續(xù)的操作。因此,服務(wù)器端收到一個(gè)客戶的套接字后,就應(yīng)該啟動(dòng)專門為該客戶服務(wù)的線程。</p><p> 3.3 主要代碼分析</p><p> 3.3.1 使用套接字實(shí)
28、現(xiàn)的主要方法</p><p> 服務(wù)器為每個(gè)客戶啟動(dòng)一個(gè)線程,在該線程中通過套接字和客戶交流信息。當(dāng)向服務(wù)器發(fā)送一條聊天信息時(shí),服務(wù)器要讓所有的這些線程中的輸出流寫入信息,這樣所有的客戶的套接字的輸入流就讀取到了這一條信息。</p><p> 如果想把信息送給特定的用戶,服務(wù)器就讓特定的線程中的輸出流寫入信息,那么只有特定的客戶的套接字的輸入流可以讀取到這條信息。</p>
29、<p><b> 3.3.2 客戶端</b></p><p> public void actionPerformed(ActionEvent e)</p><p> { if(e.getSource()==connection)</p><p> { try //請(qǐng)求和服務(wù)器建立套接字連接</p><
30、;p> { if(socket.isConnected())</p><p><b> {} </b></p><p><b> else</b></p><p> {InetAddress address=InetAddress.getByName("127.0.0.1");</p
31、><p> InetSocketAddress socketAddress=new InetSocketAddress(address,666);</p><p> socket.connect(socketAddress); </p><p> in =new DataInputStream(socket.getInputStream());</p>
32、<p> out = new DataOutputStream(socket.getOutputStream());</p><p> name=inputName.getText();</p><p> out.writeUTF("姓名:"+name);</p><p> send.setEnabled(true);<
33、;/p><p> if(!(thread.isAlive()))</p><p> thread=new Thread(this); </p><p> thread.start();</p><p><b> }</b></p><p><b> } </b><
34、/p><p> catch (IOException ee){}</p><p><b> }</b></p><p> if(e.getSource()==send)</p><p> { String s=inputContent.getText();</p><p> if(s!=n
35、ull)</p><p> { try { out.writeUTF("聊天內(nèi)容:"+name+":"+s);</p><p><b> }</b></p><p> catch(IOException e1){} </p><p> } &l
36、t;/p><p><b> }</b></p><p><b> }</b></p><p> 3.3.3 服務(wù)器端</p><p> public class ChatServer </p><p> { public static void main(String
37、 args[])</p><p> { ServerSocket server=null;</p><p> Socket you=null;</p><p> Hashtable peopleList; </p><p> peopleList=new Hashtable(); </p><p>
38、 while(true) </p><p> { try { server=new ServerSocket(666);</p><p><b> }</b></p><p> catch(IOException e1) </p><p> { System.out.println("正在監(jiān)聽&
39、quot;);//ServerSocket對(duì)象不能重復(fù)創(chuàng)建</p><p><b> } </b></p><p> try { you=server.accept(); //堵塞狀態(tài),除非有客戶呼叫 </p><p> InetAddress address=you.getInetAddress();&
40、lt;/p><p> System.out.println("客戶的IP:"+address);</p><p><b> }</b></p><p> catch (IOException e) {}</p><p> if(you!=null) </p><p> {
41、 Server_thread peopleThread=new Server_thread(you,peopleList);</p><p> peopleThread.start();//為每個(gè)客戶啟動(dòng)一個(gè)專門的線程 </p><p><b> }</b></p><p> else { continue
42、;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> class Server_thread exte
43、nds Thread</p><p> { String name=null; </p><p> Socket socket=null;</p><p> File file=null;</p><p> DataOutputStream out=null;</p><p> DataInput
44、Stream in=null;</p><p> Hashtable peopleList=null;</p><p> Server_thread(Socket t,Hashtable list)</p><p> { peopleList=list;</p><p><b> socket=t;</b>&l
45、t;/p><p> try { in=new DataInputStream(socket.getInputStream());</p><p> out=new DataOutputStream(socket.getOutputStream());</p><p><b> }</b></p><p> catc
46、h (IOException e) {}</p><p><b> } </b></p><p><b> 4 調(diào)試分析</b></p><p><b> 4.1 遇到的問題</b></p><p> 圖形用戶界面設(shè)計(jì)按鈕和文本框設(shè)計(jì)中的按鈕上的事件處理問題。<
47、/p><p> 解決:通過java程序設(shè)計(jì)教程中的事件和事件處理知道了具體事件的處理是使用事件對(duì)應(yīng)的監(jiān)聽者接口中所提供的抽象方法,這些方法需要重新定義,例如本程序中的public void actionPerformed(ActionEvent e),該方法用來對(duì)發(fā)生在按鈕上事件的處理。</p><p> 輸入流和輸出流的問題。</p><p> 解決:Input
48、StreamReader緩沖處理流通信雙方需要建立Socket連接,本程序中Socket包含兩個(gè)流一個(gè)輸出流向外發(fā)送數(shù)據(jù),一個(gè)輸入流接收數(shù)據(jù)。</p><p><b> 監(jiān)聽端口的問題。</b></p><p> 解決:通過Socket應(yīng)用方面的知識(shí)知道了監(jiān)聽端口是引用Socket構(gòu)造方法,指定了服務(wù)器程序中其監(jiān)聽的端口,還需拋出異常。</p>&l
49、t;p> 4.2 測(cè)試結(jié)果分析</p><p> 本次設(shè)計(jì)在調(diào)試過程中出現(xiàn)了許多問題,其中,最為嚴(yán)重的錯(cuò)誤就是在最初的程序中,并沒有將異常處理加入到程序中去,所以在程序運(yùn)行時(shí)出現(xiàn)了許多錯(cuò)誤,后來經(jīng)過同學(xué)的幫助和查閱資料,我將異常處理加入到了代碼中,也就沒有大的問題。異常處理對(duì)程序是很重要的,加入異常處理有益于我們找到自己的錯(cuò)誤,同時(shí)異常處理也能夠?qū)⒄Z(yǔ)句使用程序處理錯(cuò)誤的能力,有效的提高了我們完成程序的效
50、率。</p><p><b> 5 用戶使用說明</b></p><p> 首先運(yùn)行服務(wù)器端,正在監(jiān)聽。</p><p> 運(yùn)行客戶端,輸入昵稱,并連接服務(wù)器,并發(fā)送消息。</p><p> 運(yùn)行多個(gè)客戶端,實(shí)現(xiàn)群聊。</p><p><b> 6 課程設(shè)計(jì)總結(jié)</b&g
51、t;</p><p> 這次課程設(shè)計(jì)經(jīng)過不懈的努力,從對(duì)整個(gè)實(shí)現(xiàn)的功能的設(shè)計(jì),編寫代碼,還有調(diào)試分析與完善設(shè)計(jì),經(jīng)過了很長(zhǎng)一段時(shí)間才實(shí)現(xiàn)了程序基本滿足聊天的需要。通過這次課程設(shè)計(jì),增強(qiáng)了動(dòng)手能力和解決實(shí)際問題的能力,再次之前,對(duì)Java編程技術(shù)和網(wǎng)絡(luò)Socket編程知識(shí)都只是略知皮毛,缺乏深入的認(rèn)識(shí),對(duì)其工作方式和原理缺乏透徹的認(rèn)識(shí)。</p><p> 在這段期間里,我認(rèn)真學(xué)習(xí)了Jav
52、a語(yǔ)言的開發(fā)、Applet小程序的實(shí)現(xiàn)、異常處理,對(duì)編程思想有了進(jìn)一步的體會(huì),程序雖然完成,但是還存在許多缺點(diǎn),比如沒有列出上線客戶、界面雖然簡(jiǎn)潔但是不太美觀,由于時(shí)間和掌握的知識(shí)的問題只實(shí)現(xiàn)了群聊,對(duì)私聊的功能沒有實(shí)現(xiàn),這個(gè)部分在今后我會(huì)繼續(xù)完善,希望自己在不斷學(xué)習(xí)和實(shí)踐中收獲到更多。</p><p><b> 7 附錄</b></p><p> //ChatS
53、erver.java</p><p> import java.io.*;</p><p> import java.net.*;</p><p> import java.util.*;</p><p> public class ChatServer </p><p> { public static
54、void main(String args[])</p><p> { ServerSocket server=null;</p><p> Socket you=null;</p><p> Hashtable peopleList; </p><p> peopleList=new Hashtable(); </
55、p><p> while(true) </p><p> { try { server=new ServerSocket(666);</p><p><b> }</b></p><p> catch(IOException e1) </p><p> { System.out.pri
56、ntln("正在監(jiān)聽");</p><p><b> } </b></p><p> try { you=server.accept(); </p><p> InetAddress address=you.getInetAddress();</p><p>
57、 System.out.println("客戶的IP:"+address);</p><p><b> }</b></p><p> catch (IOException e) {}</p><p> if(you!=null) </p><p> { Server_thread peop
58、leThread=new Server_thread(you,peopleList);</p><p> peopleThread.start(); </p><p><b> }</b></p><p> else { continue;</p><p><b> }&l
59、t;/b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> class Server_thread extends Thread</p><p> {
60、String name=null; </p><p> Socket socket=null;</p><p> File file=null;</p><p> DataOutputStream out=null;</p><p> DataInputStream in=null;</p><p>
61、; Hashtable peopleList=null;</p><p> Server_thread(Socket t,Hashtable list)</p><p> { peopleList=list;</p><p><b> socket=t;</b></p><p> try { in=new D
62、ataInputStream(socket.getInputStream());</p><p> out=new DataOutputStream(socket.getOutputStream());</p><p><b> }</b></p><p> catch (IOException e) {}</p><
63、p><b> } </b></p><p> public void run() </p><p> { while(true)</p><p> { String s=null; </p><p><b> try{</b></p><p
64、> s=in.readUTF(); //in讀取客戶放進(jìn)“線路”里的信息,堵塞狀態(tài) </p><p> if(s.startsWith("姓名:")) </p><p><b> { name=s;</b></p><p> boolean bo
65、o=peopleList.containsKey(name);</p><p> if(boo==false) </p><p> { peopleList.put(name,this); </p><p><b> }</b></p><p><b> else</b>&
66、lt;/p><p> { out.writeUTF("請(qǐng)換昵稱:");</p><p> socket.close();</p><p><b> break; </b></p><p><b> }</b></p><p><b> }&
67、lt;/b></p><p> else if(s.startsWith("聊天內(nèi)容")) </p><p> { String message=s.substring(s.indexOf(":")+1);</p><p> Enumeration chatPersonList=peopleList.elemen
68、ts(); </p><p> while(chatPersonList.hasMoreElements())</p><p> { ((Server_thread)chatPersonList.nextElement()).out.writeUTF("聊天內(nèi)容:"+</p><p><b> message);&l
69、t;/b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> catch(IOException ee) </p><p> { Enume
70、ration chatPersonList=peopleList.elements(); </p><p> while(chatPersonList.hasMoreElements()) </p><p><b> { try</b></p><p> { Server_thread th=(Serve
71、r_thread)chatPersonList.nextElement();</p><p> if(th!=this&&th.isAlive())</p><p> { th.out.writeUTF("客戶離線:"+name);</p><p><b> }</b></p><p
72、><b> }</b></p><p> catch(IOException eee){}</p><p><b> } </b></p><p> peopleList.remove(name); </p><p> try { socket.close();</p>
73、<p> } </p><p> catch(IOException eee){}</p><p> System.out.println(name+"客戶離開了");</p><p> break; </p><p> } &l
74、t;/p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> //Client.java</p><p> import java.net.*;</p><
75、;p> import java.io.*;</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import javax.swing.*; </p><p> public class Client</p><p>
76、; { public static void main(String args[])</p><p> { new ChatClient();</p><p><b> }</b></p><p><b> }</b></p><p> class ChatClient extends
77、 Frame implements Runnable,ActionListener</p><p> { Button connection,send;</p><p> TextField inputName,inputContent;</p><p> TextArea chatResult;</p><p> Socket s
78、ocket=null;</p><p> DataInputStream in=null;</p><p> DataOutputStream out=null;</p><p> Thread thread; </p><p> String name="";</p><p> publ
79、ic ChatClient ()</p><p> { socket=new Socket();</p><p> Box box1=Box.createHorizontalBox();</p><p> connection=new Button("Connect To Server");</p><p> s
80、end=new Button("Send");</p><p> send.setEnabled(false);</p><p> inputName=new TextField(6);</p><p> inputContent=new TextField(22);</p><p> chatResult=new
81、 TextArea();</p><p> box1.add(new Label("Input Nickname"));</p><p> box1.add(inputName);</p><p> box1.add(connection);</p><p> Box box2=Box.createHorizont
82、alBox();</p><p> box2.add(new Label("Edit"));</p><p> box2.add(inputContent);</p><p> box2.add(send);</p><p> connection.addActionListener(this);</p>
83、;<p> send.addActionListener(this);</p><p> thread=new Thread(this); </p><p> add(box1,BorderLayout.NORTH);</p><p> add(box2,BorderLayout.SOUTH);</p><p> ad
84、d(chatResult,BorderLayout.CENTER);</p><p> setBounds(10,30,400,280);</p><p> setVisible(true);</p><p> validate();</p><p> addWindowListener(new WindowAdapter()<
85、/p><p> { public void windowClosing(WindowEvent e)</p><p> { System.exit(0);</p><p><b> }</b></p><p><b> });</b></p><p><b>
86、; }</b></p><p> public void actionPerformed(ActionEvent e)</p><p> { if(e.getSource()==connection)</p><p><b> { try </b></p><p> { if(socket.is
87、Connected())</p><p><b> {} </b></p><p><b> else</b></p><p> { InetAddress address=InetAddress.getByName("127.0.0.1");</p><p> Ine
88、tSocketAddress socketAddress=new InetSocketAddress(address,666);</p><p> socket.connect(socketAddress); </p><p> in =new DataInputStream(socket.getInputStream());</p><p> out = n
89、ew DataOutputStream(socket.getOutputStream());</p><p> name=inputName.getText();</p><p> out.writeUTF("姓名:"+name);</p><p> send.setEnabled(true);</p><p>
90、if(!(thread.isAlive()))</p><p> thread=new Thread(this); </p><p> thread.start();</p><p><b> }</b></p><p><b> } </b></p><p> c
91、atch (IOException ee){}</p><p><b> }</b></p><p> if(e.getSource()==send)</p><p> { String s=inputContent.getText();</p><p> if(s!=null)</p><
92、p> { try { out.writeUTF("聊天內(nèi)容:"+name+":"+s);</p><p><b> }</b></p><p> catch(IOException e1){} </p><p> } </p><p>&
93、lt;b> }</b></p><p><b> }</b></p><p> public void run()</p><p> { String s=null;</p><p> while(true)</p><p> { try{ s=in.rea
94、dUTF();</p><p> chatResult.append("\n"+s);</p><p><b> }</b></p><p> catch(IOException e) </p><p> { chatResult.setText("與服務(wù)器已斷開");&
95、lt;/p><p> try { socket.close();</p><p><b> }</b></p><p> catch(Exception exp) {}</p><p><b> break;</b></p><p><b> } <
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)--java程序設(shè)計(jì)
- java課程設(shè)計(jì)--java面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)
- 《java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告--java桌面應(yīng)用程序設(shè)計(jì)開發(fā)
- java程序設(shè)計(jì)課程設(shè)計(jì)研究報(bào)告
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)---java日歷
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)java日歷
- java課程設(shè)計(jì)--- 記事本程序設(shè)計(jì)
- java程序設(shè)計(jì)課程論文
- java語(yǔ)言課程設(shè)計(jì)---記事本程序設(shè)計(jì)
- java程序設(shè)計(jì)與開發(fā)技術(shù)課程設(shè)計(jì)
- java程序設(shè)計(jì)
- java課程設(shè)計(jì)-聊天程序
- java面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)--學(xué)生信息管理系統(tǒng)程序設(shè)計(jì)
- java抽獎(jiǎng)程序課程設(shè)計(jì)
- java程序設(shè)計(jì)復(fù)習(xí)
- java程序設(shè)計(jì)課程項(xiàng)目題目2016
- java語(yǔ)言程序設(shè)計(jì)課程標(biāo)準(zhǔn)
- java程序設(shè)計(jì)-教案
- java程序設(shè)計(jì)題目
評(píng)論
0/150
提交評(píng)論