五子棋java課程設計(網(wǎng)上案例)_第1頁
五子棋java課程設計(網(wǎng)上案例)_第2頁
五子棋java課程設計(網(wǎng)上案例)_第3頁
五子棋java課程設計(網(wǎng)上案例)_第4頁
五子棋java課程設計(網(wǎng)上案例)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、華東交通大學課程設計報告課程設計(論文)任務書 軟 件 學 院 學 院 軟件+電子商務 專業(yè) 二 班 一、課程設計(論文)題目 java 課程設計五子棋帶聊天系統(tǒng) 二、課程設計(論文)工作自 2010 年 12 月 20 日起至 2010 年 12 月 24 日止。三、課程設計(論文) 地點: 軟 件 學 院 實 訓 中 心 四、課程設計(論文)內(nèi)容要求:1本課程設計的目的(1)掌握Java語言的程序設計方法; (2)理論聯(lián)系實際,進一步提高學生的軟件開發(fā)技術;(3)培養(yǎng)學生分析、解決問題的能力;(4)提高學生實踐論文撰寫能力。2課程設計的任務及要求1)課程設計任務:實現(xiàn)一個簡單的多用戶五子棋

2、的游戲程序,包括如下兩個界面設計要求:1、五子棋游戲室界面:用戶可以選擇對弈桌及角色(執(zhí)黑、執(zhí) 白、旁觀);2、游戲界面:有開始、退出、悔棋、判斷勝負;發(fā)言及顯示區(qū);用戶列表區(qū);棋盤繪制區(qū);3、使用Socket來完成服務端和客戶端的通信;4、使用多線程技術支持多用戶操作;5、增強功能:支持用戶注冊、添加和刪除好友、戰(zhàn)績顯示、發(fā)送消息、接受消息、多人聊天等功能;使用數(shù)據(jù)庫保存用戶信息。2)創(chuàng)新要求: 以上任務還未完善,悔棋、用戶列表區(qū)及增強功能板塊未完善。今后,參考資料書,實現(xiàn)五子棋網(wǎng)絡對戰(zhàn)及數(shù)據(jù)庫的利用。3)課程設計論文編寫要求(1)課程設計任務及要求(2)設計思路-工作原理、功能規(guī)劃(3)詳

3、細設計-數(shù)據(jù)分析、算法思路、類設計、功能實現(xiàn)(含程序流程圖、主要代碼及注釋)、界面等。(4)運行調(diào)試與分析討論-給出運行屏幕截圖,分析運行結(jié)果,有何改進想法等。(5)設計體會與小結(jié)-設計遇到的問題及解決辦法,通過設計學到了哪些新知識,鞏固了哪些知識,有哪些提高。(6)參考文獻(必須按標準格式列出,可參考教材后面的參考文獻格式)(7)報告按規(guī)定排版打印,要求裝訂平整,否則要求返工;(8)課設報告的裝訂順序如下:封面-任務書-中文摘要-目錄-正文-附錄(代碼及相關圖片)(9)嚴禁抄襲,如有發(fā)現(xiàn),按不及格處理。4)課程設計評分標準: (1)學習態(tài)度:10分;(2)系統(tǒng)設計:20分;(3)編程調(diào)試:2

4、0分;(4)回答問題:20分;(5)論文撰寫:30分。5)參考文獻:(1)丁振凡. Java語言實用教程(第2版)M. 北京郵電大學出版社. 2008.1 (2)丁振凡. Java語言實用教程實驗指導(第2版)M. 北京郵電大學出版社. 2008.1(3)楊樹林等. Java語言最新實用案例教程(第2版)M. 清華大學出版社. 2010.76)課程設計進度安排1準備階段(4學時):選擇設計題目、了解設計目的要求、查閱相關資料2程序模塊設計分析階段(4學時):程序總體設計、詳細設計3代碼編寫調(diào)試階段(8學時):程序模塊代碼編寫、調(diào)試、測試4撰寫論文階段(4學時):總結(jié)課程設計任務和設計內(nèi)容,撰寫

5、課程設計論文學生簽名: 2010 年 12 月 20 日課程設計(論文)評審意見(1)學習態(tài)度(10分):優(yōu)()、良()、中()、一般()、差(); (2)系統(tǒng)設計(20分):優(yōu)( )、良()、中()、一般()、差(); (3)編程調(diào)試(20分):優(yōu)()、良()、中()、一般()、差();(4)回答問題(20分):優(yōu)()、良()、中()、一般()、差();(5)論文撰寫(30分):優(yōu)()、良()、中()、一般()、差(); 評閱人: 職稱: 講師 2010 年 12 月 25 日中文摘要 五子棋源于中國。我的這個棋盤是15×15棋盤,橫行、豎行都有15個交點,在交點處黑白棋子對弈。在

6、橫,豎,斜四個方向若有一方連續(xù)超過5個則該方勝利。完成棋盤面板畫棋盤,對鼠標注冊監(jiān)聽撲捉下棋位,畫上棋子。根據(jù)下棋位點,將棋子布局模擬成二位數(shù)組,對數(shù)組進行遍歷,判斷勝負。棋盤還附加了聊天功能,開啟次程序后,便在ChatServer內(nèi)申請賬號,實現(xiàn)與其他戶的群聊,采用了多線程技術和Socket實現(xiàn)通信。目錄一、課程設計任務及要求1二、需求分析12.1 棋盤板塊12.2 聊天板塊12.3 ChatSever12.4 編譯環(huán)境12.5 參考資料1三、設計思路13.1 板塊的顯示13.2 注冊監(jiān)聽23.3 ChatServer23.4 下棋2四、詳細設計34.1 WuZiQi類34.2 ChatSe

7、ver類44.3多用戶聊天54.4 流程圖6五、運行調(diào)試與分析討論7六、設計體會與小結(jié)9七、參考文獻10 一、課程設計任務及要求1、五子棋游戲室界面:用戶可以選擇對弈桌及角色(執(zhí)黑、執(zhí)白、旁觀);2、 游戲界面:有開始、退出、悔棋、判斷勝負;發(fā)言及顯示區(qū);用戶列表 區(qū);棋盤繪制區(qū);3、使用Socket來完成服務端和客戶端的通信;4、使用多線程技術支持多用戶操作;5、增強功能:支持用戶注冊、添加和刪除好友、戰(zhàn)績顯示、發(fā)送消息、接 受消息、多人聊天等功能;使用數(shù)據(jù)庫保存用戶信息。二、需求分析2.1 棋盤板塊 畫一個15×15的棋盤版面,及兩個按鈕組。初始化:開始、重置、 退出;角色選擇:

8、黑方、白方、旁觀。2.2 聊天板塊 聊天信息顯示區(qū),聊天信息輸入?yún)^(qū)。2.3 ChatSever 模擬服務器:用于橋接不同用戶,實現(xiàn)接收用戶發(fā)出的信息,然后 將信息傳遞到每個用戶的聊天窗口。2.4 編譯環(huán)境 Eclipse 實驗室上機 在宿舍編寫2.5 參考資料 Java 語言使用教程,百度文庫資料(五子棋判斷勝負算法)。三、設計思路3.1 板塊的顯示 畫棋盤 調(diào)用public void paint(Graphics g)QiPan(g);方法 畫一個15×15的棋盤面版。 初始化 定義兩個Panel P1、P2,在初始化板塊將JButton 開始、 重置,退出加入到P1,將黑方、白方

9、、旁觀加入到P2。 聊天板塊 在初始化時定義一個JTextArea 和一個JTextField 實現(xiàn)聊 天功能3.2 注冊監(jiān)聽 對角色選擇按鈕注冊ActionListener監(jiān)聽,設置用戶的角色。定義黑子int類型 0,白子1。 對按鈕開始、重置注冊ActionListener監(jiān)聽,如果點擊開始,用戶進 入下棋狀態(tài),有一方贏了,棋盤上則不能再點擊棋子。點擊重置,則開始新的一輪。 對鼠標注冊mouseClicked監(jiān)聽,鼠標點擊棋盤時獲取下棋的位置。 對JTextField注冊ActionListener,用戶輸入聊天信息后,通過Server傳遞給其他用戶,在對話框JTextArea內(nèi)顯示。3.

10、3 ChatServerclass ServerThread implements Runnable 類監(jiān)聽線程,監(jiān)聽是否有客戶端法過信息來。屬性: Vector threads 向量存儲線程 Socket socket 服務端口 DataInputStream in 輸入流 DataOutputStream out 輸出流 int nid 用戶ID方法: 構(gòu)造器public ServerThread(Socket socket,Vector threads) 實現(xiàn)信息的輸入、輸出實現(xiàn)public void run()監(jiān)聽客戶端是否發(fā)信息過來,當客戶離開時向 其他客戶發(fā)信息,把客戶端的信息發(fā)給

11、其他客戶。 服務器向客戶端發(fā)信息public void write(String msg) 獲取線程IDpublic int getID() 設置線程IDpublic void setID(int nid) 在Chatserver類內(nèi)調(diào)用ServerThread 實現(xiàn)對所有來訪客戶監(jiān)聽,為來訪者設置ID,若有離開用戶,則在聊天板塊廣播。3.4 下棋用二維數(shù)組模擬棋盤chessbody1717,黑方下棋,則黑方所下棋位置的值等于旗子的顏色加一,白方類似。最后1代表下了黑棋,2表示下了白棋,0表示沒下棋。從橫向、縱向、斜方向判斷勝負。下完一步判斷一次,有一個方向上同色棋子數(shù)超過5,則勝負已判斷。四

12、、詳細設計4.1 WuZiQi類 屬性: int color_Qizi=0; 黑子0 白子1 int ChessBody=new int1717; 無棋子 0,黑棋 1,白棋 2; int GameStart=0; JButton start,exit,rest; JButton check=new JButton3; String chess="黑方","白方","旁觀"方法: 獲取下棋位點 public void mouseClicked(MouseEvent e) /Graphics g=getGraphics(); int x

13、,y; x=e.getX();y=e.getY();/鼠標點擊位置 if(x<45|y<45|x>495|y>495) return;/在棋盤之外則不下 if(x%30>15)/獲取下棋點的位置 x+=30; if(y%30>15) y+=30; x=x/30*30; /x、y為棋子中心位置 y=y/30*30; PlayQizi(x,y);/下棋 下棋點擊后天上棋子,每一步完了后判斷勝負,從四個方向上判斷 勝負,并在棋盤中間顯示哪方贏了! public void PlayQizi(int x,int y) if (GameStart=0) /判斷游戲未開始

14、 return; if (ChessBodyx/30y/30!=0) return; Graphics g=getGraphics(); if (color_Qizi=1)/判斷黑子還是白子 g.setColor(Color.black); color_Qizi=0; else g.setColor(Color.white); color_Qizi=1; g.fillOval(x-12,y-12,24,24); ChessBodyx/30y/30=color_Qizi+1; /判斷輸贏/ g.setColor(Color.magenta); g.setFont(new Font("f

15、hahf ",Font.BOLD,30);if(GameWin橫(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);GameStart=0;if(GameWin豎(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);GameStart=0; if(GameWin撇(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"贏了!",200

16、,200);GameStart=0;if(GameWin捺(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);GameStart=0;4.2 ChatSever類 public void run()System.out.println ("Thread is running");try/監(jiān)聽客戶端是否發(fā)消息過來while(true)String receive = in.readUTF();if(receive = null)return;/當某客戶離開,給其它客戶端發(fā)消息if(

17、receive.equals("leave")for(int i=0;i < threads.size();i+)ServerThread st = (ServerThread)threads.elementAt(i);st.write("*"+getID()+"leaving.*");else/把某客戶端發(fā)過來的發(fā)送到所有客戶端for(int i=0;i < threads.size();i+)ServerThread st = (ServerThread)threads.elementAt(i);st.write(&q

18、uot;<"+getID()+">: "+receive); 4.3多用戶聊天 初始化網(wǎng)絡,并連接到服務端try /獲得URLURL url = this.getCodeBase();InetAddress addr = InetAddress.getByName(url.getHost();Socket socket;System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol();/5555 為服務器端口

19、socket = new Socket(addr,5555);/由本套接口獲得輸入,輸出流in = new DataInputStream(socket.getInputStream();out = new DataOutputStream(socket.getOutputStream();catch (Exception ex) ex.printStackTrace(); 線程開始new Thread(this).start(); Run方法向服務器發(fā)送信息并接收信息 public void run() try /監(jiān)視服務器所發(fā)送的信息 while(true) String receive

20、= in.readUTF(); if(receive!=null) txtDisplay.append(receive + "n"); /將光標移動到最后一個以實現(xiàn)滾動條的自動置底 txtDisplay.setCaretPosition(txtDisplay.getText().length(); catch (Exception ex) txtDisplay.append("Network problem or Server down"); txtInput.setVisible(false); public void stop() try out.w

21、riteUTF("leave"); catch(Exception ex)4.4 流程圖 用戶1用戶2用戶3用戶5用戶3Server 圖 41 網(wǎng)絡通信 用戶與服務器間的通信是雙向的,用戶將信息傳遞給Server,Server再將信息傳遞給每個用戶。 Init()方法Paint()方法Run()方法注冊監(jiān)聽WuZiQi類 圖 42 WuZiQi類的方法 棋盤繼承JApplet類,注冊監(jiān)聽,實現(xiàn)Init()、Run()、Paint()方法、注冊監(jiān)聽。畫棋盤,用二維數(shù)組模擬棋盤下子情況。對棋盤棋子的獲取,判斷勝負。與Server連接,監(jiān)聽,獲取來自服務器的信息。五、運行調(diào)試與分

22、析討論 圖 51 棋盤圖51 棋盤圖,當選擇好黑白角色后點擊開始,便可以下棋;點擊重置時重新開始下棋;點擊退出時結(jié)束游戲,并退出。 該棋盤未實現(xiàn)網(wǎng)絡棋盤,只能自己跟自己下棋。還欠缺悔棋步驟,可以用Vector存儲已下的棋子的信息,調(diào)用repaiant() 然后再畫除最后一步的棋盤,實現(xiàn)悔棋操作。由于對Socket 用法還不熟悉,不能將棋盤通信與聊天通信區(qū)分開來,也就不能實現(xiàn)聯(lián)網(wǎng)下棋。 圖52ChatServer如果用戶登錄則監(jiān)聽 listening .、accept a client使用了Socket,和多線程技術。定義了Vector 存儲用戶線程,實現(xiàn)ChatServer將信息傳遞給每個用戶

23、,接收每個用戶的信息。圖53聊天對話框用戶4、5進入了聊天,對話。當對話框縮小或關閉時ChatServer都會發(fā)出用戶離開的消息。此對話框可以允許多個用戶群聊,但是少了一個窗口顯示所有在線用戶信息。即要求五,增強功能未實現(xiàn)。不能實現(xiàn)用戶注冊,添加好友,查看好有信息,對于數(shù)據(jù)庫的使用不太熟悉。 第 18 頁 六、設計體會與小結(jié)經(jīng)過為期一周的課程設計,感覺自己所學遠遠不能解決做課設時的需求。在熟悉課本和上網(wǎng)搜索后,才算馬馬虎虎的完成了任務。在畫棋盤時,調(diào)用draw方法對于畫圖這塊的坐標布置,在今后學畫其他圖畫時能夠得心應手。獲取棋子方法的巧妙,注冊鼠標,獲取點擊位置,除以棋盤間隔,去掉不為整數(shù)的一

24、塊,再乘以棋盤間隔便獲得最臨近點的下棋坐標,即所要下棋的位置。用二維數(shù)組模擬棋盤,無棋子的置為0,黑子置為1,白子置為2,以便在判斷勝負時利于同色棋子的查找。整個棋盤就模擬出來了,很巧妙,不過有更好的方法用向量存儲棋子信息,便于悔棋等操作。實現(xiàn)多用戶聊天,老師后面講的不是很多,做起來有點費力。參考網(wǎng)上資料,明白Socket原理。開始時照著課本上的例子,不能得出想要的效果,而且只運行了一個程序看不到有通信的效果。后面在運行了Server類后,自己嘗試著兩個Client類,實現(xiàn)了通話,就像騰訊QQ里面一樣的效果。里面定義了Vector 線程,實現(xiàn)了多線程用法。兩個板塊大體實現(xiàn),但是后面的要求五,由

25、于數(shù)據(jù)庫的使用不是太熟悉,不能注冊用戶,添加好友,查找好友,還有悔棋操作未能實現(xiàn)。此程序最大的缺點還在于,不能實現(xiàn)網(wǎng)絡兩人下五子棋。由于不能將棋盤信息與聊天信息區(qū)分,不能告訴對反自己下了哪一步,所以根據(jù)自己的水平也就能做到這了,今后加以完善。感覺這次課設有點失敗,平時學的不能靈活的運用,今后得多加練習,多點鍛煉的機會,積累跟多的知識。還有算法這塊,解決一個問題的關鍵,培養(yǎng)一個好的類的思想,將問題有條有理的理清。形成一個清晰的思路后,在動手,下筆如有神。 七、參考文獻1丁振凡. Java語言實用教程(第2版)M. 北京郵電大學出版社. 2008.1 2丁振凡. Java語言實用教程實驗指導(第2

26、版)M. 北京郵電大學出版社. 2008.13楊樹林等. Java語言最新實用案例教程(第2版)M. 清華大學出版社. 2010.7附錄package 五子棋;import java.applet.*; import java.awt.*; import java.awt.event.*; import java.applet.Applet; import java.awt.Color; import java.io.*;import .*;import javax.swing.*;public class WuZiQi extends JApplet implements ActionLis

27、tener,MouseListener,MouseMotionListener,ItemListener,Runnableint color_Qizi=0;/ 黑子0 白子1int ChessBody=new int1717;/無棋子 0,黑棋 1,白棋 2;int GameStart=0;JButton start,exit,rest;JButton check=new JButton3;String chess="黑方","白方","旁觀"JTextArea txtDisplay;JTextField txtInput;DataI

28、nputStream in; DataOutputStream out;public void init()setLayout(null); start=new JButton("開始"); rest=new JButton("重置"); exit=new JButton("退出"); Panel p1=new Panel();p1.add(start); p1.add(rest);p1.add(exit);add(p1); p1.setBounds(130,510,300,50);Panel p2=new Panel();for(i

29、nt i=0;i<chess.length;i+) checki=new JButton(chessi);p2.add(checki); add(p2); p2.setBounds(600,50,200,50);for(int i=0;i<chess.length;i+) checki.addActionListener(this); start.addActionListener(this);exit.addActionListener(this);rest.addActionListener(this);addMouseListener(this);txtDisplay = n

30、ew JTextArea(10,50);txtDisplay.setEditable(false);txtInput = new JTextField(10); Panel chat=new Panel(); chat.setLayout(new BorderLayout();chat.add(BorderLayout.CENTER,new JScrollPane(txtDisplay);chat.add(BorderLayout.SOUTH,txtInput); add(chat);chat.setBounds(900, 300, 350, 300);txtInput.addActionLi

31、stener(/對輸入文本框地方注冊事件監(jiān)聽new ActionListener() public void actionPerformed(ActionEvent event) String str = txtInput.getText();txtInput.setText("");try out.writeUTF(str);catch(Exception e) );in = null; out = null;初始化網(wǎng)絡,并連接到服務端try /獲得URLURL url = this.getCodeBase;InetAddress addr = InetAddress.g

32、etByName(url.getHost();Socket socket;System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol();/5555 為服務器端口socket = new Socket(addr,5555);/由本套接口獲得輸入,輸出流in = new DataInputStream(socket.getInputStream();out = new DataOutputStream(socket.getOutputStream()

33、;catch (Exception ex) ex.printStackTrace(); new Thread(this).start();/線程開始public void actionPerformed(ActionEvent e)Graphics g=getGraphics();if(e.getSource()=start)GameStart();if(e.getSource()=rest)GameReSt();if(e.getSource()=exit)GameEnd();if(e.getSource()=check0) color_Qizi=0; public void mousePre

34、ssed(MouseEvent e) public void mouseClicked(MouseEvent e)/獲取下棋位點 int x,y; x=e.getX();y=e.getY(); if(x<45|y<45|x>495|y>495) return; if(x%30>15)/獲取下棋點的位置 x+=30; if(y%30>15) y+=30; x=x/30*30; y=y/30*30; PlayQizi(x,y);/下棋 public void mouseEntered(MouseEvent e) public void mouseExited(M

35、ouseEvent e) public void mouseReleased(MouseEvent e) public void mouseDragged(MouseEvent e) public void mouseMoved(MouseEvent e) public void paint(Graphics g)QiPan(g); public void PlayQizi(int x,int y) if (GameStart=0) /判斷游戲未開始 return; if (ChessBodyx/30y/30!=0) return; Graphics g=getGraphics(); if (

36、color_Qizi=1)/判斷黑子還是白子 g.setColor(Color.black); color_Qizi=0; else g.setColor(Color.white); color_Qizi=1; g.fillOval(x-12,y-12,24,24); ChessBodyx/30y/30=color_Qizi+1; /判斷輸贏/ g.setColor(Color.magenta); g.setFont(new Font("fhahf ",Font.BOLD,30);if(GameWin橫(x/30,y/30)g.drawString(GetQiziColor

37、(color_Qizi)+"贏了!",200,200);GameStart=0;if(GameWin豎(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);GameStart=0;if(GameWin撇(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200); GameStart=0;f(GameWin捺(x/30,y/30)g.drawString(GetQiziColor(color_Qi

38、zi)+"贏了!",200,200);GameStart=0; /獲得贏方/ public String GetQiziColor(int x) if(x=0 )return "黑方"else return "白方" /判斷輸贏/ public boolean GameWin橫(int x,int y) int x1,y1;int t=1; x1=x;y1=y; for(int i=1;i<5;i+) if(x1>16)break; if(ChessBodyx1+iy1=ChessBodyxy) t+=1; else br

39、eak; for(int i=1;i<5;i+) if(x1<2)break; if(ChessBodyx1-iy1=ChessBodyxy)t+=1; else break; if(t>4) return true; else return false; public boolean GameWin豎(int x,int y) int x1,y1;int t=1;x1=x;y1=y; for(int i=1;i<5;i+) if(x1>16)break; if(ChessBodyx1y1+i=ChessBodyxy) t+=1; else break; for(

40、int i=1;i<5;i+) if(x1<2)break; if(ChessBodyx1y1-i=ChessBodyxy) t+=1; else break; if(t>4) return true; else return false; public boolean GameWin撇(int x,int y) int x1,y1;int t=1; x1=x;y1=y; for(int i=1;i<5;i+) if(x1>16)break; if(ChessBodyx1+iy1-i=ChessBodyxy)t+=1; else break; for(int i=

41、1;i<5;i+) if(x1<2)break ; if(ChessBodyx1-iy1+i=ChessBodyxy) t+=1; else break; if(t>4)return true; else return false; public boolean GameWin捺(int x,int y) int x1,y1;int t=1;x1=x;y1=y; for(int i=1;i<5;i+) if(x1>16)break; if(ChessBodyx1-iy1-i=ChessBodyxy) t+=1; else break; for(int i=1;i&

42、lt;5;i+) if(x1<2)break; if(ChessBodyx1+iy1+i=ChessBodyxy) t+=1; else break; if(t>4) turn true; else eturn false; public void GameStart()/游戲開始 GameStart=1; Game_btn_enable(false); rest.setEnabled(true); public void Game_btn_enable(boolean e) start.setEnabled(e);rest.setEnabled(e); for(int i=0;i

43、<check.length;i+) checki.setEnabled(e); public void GameStartInit()/初始化 GameStart=0; Game_btn_enable(true); start.setEnabled(true); for(int i=0;i<17;i+) for(int j=0;j<17;j+) ChessBodyij=0; public void GameReSt()/重置 repaint(); GameStartInit(); public void QiPan(Graphics g)/畫棋盤 g.setColor(Col

44、or.cyan); int m=45;int n=m+15;G.fillRect(m,m,450,450);g.setColor(Color.black);for(int i=0;i<15;i+)g.drawLine(n,n+i*30,n+420,n+i*30);for(int i=0;i<15;i+) g.drawLine(n+i*30,n,n+i*30,n+420);g.fillRect(n+3*30-3,n+3*30-3,6,6); g.fillRect(n+3*30-3,n+11*30-3,6,6); g.fillRect(n+11*30-3,n+3*30-3,6,6);

45、g.fillRect(n+11*30-3,n+11*30-3,6,6); g.fillRect(n+7*30-3,n+7*30-3,6,6); /運行監(jiān)聽方法/ public void run() try /監(jiān)視服務器所發(fā)送的信息while(true) String receive = in.readUTF(); if(receive!=null) txtDisplay.append(receive + "n"); /將光標移動到最后一個以實現(xiàn)滾動條的自動置底 txtDisplay.setCaretPosition(txtDisplay.getText().length()

46、; catch (Exception ex) txtDisplay.append("Network problem or Server down"); txtInput.setVisible(false);public void stop() try out.writeUTF("leave");catch (Exception ex) /*ChatServer類*/import .*;import java.io.*;import java.util.*;public class ChatServer public static void main(St

47、ring args)throws ExceptionServerSocket svSocket =null;/Vector threads 為ServerThread集合Vector threads = new Vector();/開始監(jiān)聽System.out.println ("listening.");try /創(chuàng)建服務端套接口svSocket = new ServerSocket(5555);catch (Exception ex) System.out.println ("Server create ServerSocket failed!");return;tryint nid = 0;/監(jiān)聽是否有客戶端連接while(true)Socket socket = svSocket.accept();System.out.println ("accept a client");/創(chuàng)建一個新的ServerThreadServerThread st = new ServerThread(socket,threads);/為客戶端分配一個ID號st.setID(nid+);threads.add(st);new Thread(st).start();/向所有人廣播有新客戶端連接for(

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論