2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  Java程序設(shè)計課程設(shè)計</p><p>  題 目: 聊天程序 </p><p>  學(xué)生姓名: Puter </p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  注:任務(wù)書由指導(dǎo)教師填寫。<

2、;/p><p> 題 目聊天程序</p><p> 1、課程設(shè)計的目的通過本課程設(shè)計使學(xué)生能夠較全面的掌握面向?qū)ο蟪绦蛟O(shè)計的有關(guān)概念和開發(fā)方法,以便能較全面地理解、掌握和綜合運(yùn)用所學(xué)的知識,提高自身的編程能力。</p><p> 2、課程設(shè)計的內(nèi)容和要求(包括原始數(shù)據(jù)、技術(shù)要求、工作要求等)該程序?qū)崿F(xiàn)聊天功能,包括服務(wù)器段程序和客戶端程序。要求:(1)客戶端程序:可連接

3、到服務(wù)器,并將消息發(fā)送到服務(wù)器端和接受服務(wù)器端發(fā)送來的消息。(2)服務(wù)器端程序:可將消息發(fā)送到客戶端和接受客戶端發(fā)送來的消息。</p><p> 3、主要參考文獻(xiàn)[1]朱福喜.《Java語言程序設(shè)計》(第二版).科學(xué)出版社[2]陳國君等.《Java程序設(shè)計基礎(chǔ)》(第二版).清華大學(xué)出版社[3] Deitel.《Java大學(xué)基礎(chǔ)教程》(第六版).電子工業(yè)出版社 [4] MaryCampione.《Java語言導(dǎo)學(xué)

4、》(第四版).機(jī)械工業(yè)出版社[5] Y.Daniel Liang.《Java語言程序設(shè)計基礎(chǔ)篇》(第六版). 機(jī)械工業(yè)出版社[6] Kathy Sierra.《Head First Java》(第二版).東南大學(xué)出版社</p><p> 4、課程設(shè)計工作進(jìn)度計劃</p><p> 指導(dǎo)教師(簽字)日期年 月 日</p><p> 教研室意見:年 月

5、 日</p><p> 學(xué)生(簽字): 接受任務(wù)時間: 年 月 日</p><p><b>  目錄</b></p><p>  摘要...................................................1</p><p>  需求分析.............

6、...............................1</p><p>  概要設(shè)計............................................3</p><p>  三、 詳細(xì)設(shè)計............................................4四、 調(diào)試分析..................................

7、..........4</p><p>  五、結(jié)論................................................14</p><p>  六、實驗分工.............................................14</p><p>  七、參考文獻(xiàn)...........................

8、...................14</p><p><b>  摘 要</b></p><p>  在網(wǎng)絡(luò)越來越發(fā)達(dá)的今天,人們對網(wǎng)絡(luò)的依賴越來越多,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來越多,例如,國外的ICQ、國內(nèi)騰訊公司開發(fā)的OICQ。基于Java網(wǎng)絡(luò)編程的強(qiáng)大功能,本次畢業(yè)設(shè)計使用Java編寫一個聊天系統(tǒng)。   &#

9、160;</p><p>  一般來說,聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶機(jī)/服務(wù)器架構(gòu)模式通過Java提供的Soket類來連接客戶機(jī)和服務(wù)器并使客戶機(jī)和服務(wù)器之間相互通信,由于聊天是多點(diǎn)對多點(diǎn)的而Java提供的多線程功能用多線程可完成多點(diǎn)對多點(diǎn)的聊天,數(shù)據(jù)庫管理系統(tǒng)用SQL Server2000完成并通過JDBC-ODBC橋訪問數(shù)據(jù)庫。

10、60;現(xiàn)在的各種聊天工具功能越來越強(qiáng)大,但是它們的唯一的不足就是必須要聯(lián)網(wǎng)或者下載到它們的服務(wù)端,要不然是沒法脫離Intenet使用的。為了能在一個沒有連接到Intenet的局域網(wǎng)使用聊天工具,那就必須要有服務(wù)器端。</p><p>  本系統(tǒng)就是包括服務(wù)器端與客戶端,可以在局域網(wǎng)聊天的一個工具。建立在JAVA平臺上,系統(tǒng)的設(shè)計使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與

11、服務(wù)器端之間通過Socket傳送消息。使用JAVA語言編寫,開發(fā)工具采用Eclipse。服務(wù)器端設(shè)計與實現(xiàn)過程中,采用了多線程技術(shù),可以在單個程序當(dāng)中同時運(yùn)行多個不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。 </p><p>  聊天系統(tǒng)完成后將可進(jìn)行多人對多人的聊天,對好友進(jìn)行添加、刪除,對新用戶的注冊,發(fā)送消息、接受消息等等功能。 </p><p>

12、;  關(guān)鍵詞:多線程 ;客戶機(jī)/服務(wù)器 ;JAVA ; Socket ; Eclipse ; TCP/IP </p><p><b>  需求分析</b></p><p>  為了更好的掌握java這門課程的內(nèi)容,同時更好的理解與掌握socket編程,對所有面向?qū)ο蟮木幊趟枷胍约?/p>

13、編程方法的一個總結(jié)、回顧和實踐,掌握J(rèn)ava語言編程技巧。要求使用圖形用戶界面。能實現(xiàn)一個聊天室中多人聊天??梢詢扇怂搅?。(提示:使用socket通信)程序描述清晰準(zhǔn)確,思路清晰,程序能夠?qū)崿F(xiàn)相應(yīng)的功能。聊天時系統(tǒng)是通過即時通訊技術(shù)來實現(xiàn)在線聊天、交流的軟件。目前有2種架構(gòu)形式,1、一種是C/S架構(gòu),采用客戶端/服務(wù)器形式,用戶使用過程中需要下載安裝客戶端軟件,典型的代表有:QQ、百度HI 、Skype  

14、QQ VS GU、Gtalk、新浪UC、MSN等;2、采用B/S架構(gòu),即瀏覽器/服務(wù)端形式,這種形式的即時通訊軟件,直接借助互聯(lián)網(wǎng)為媒介、客戶端無需安裝任何軟件,既可以體驗服務(wù)器端進(jìn)行溝通對話,一般運(yùn)用在電子商務(wù)網(wǎng)站的服務(wù)商,典型的代表有Websitelive 、53KF、live800等</p><p><b>  二、概要設(shè)計</b></p>

15、<p>  目前國內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國外有著名的MSN(新版改名為Live Messenger)以及跨平臺Gaim等。本人取最具代表性的QQ和MSN進(jìn)行了一些研究,作為我開發(fā)聊天系統(tǒng)的準(zhǔn)備。 </p><p>  騰訊無疑是國內(nèi)即時通訊市場的霸主,自從99年進(jìn)入即時通訊領(lǐng)域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首

16、,即使近幾年面對微軟MSN的強(qiáng)大攻勢,騰訊QQ的時常占有率依然穩(wěn)步增長。騰訊的成功與其對QQ的不斷創(chuàng)新和完善是分不開的。 </p><p>  參考了許多網(wǎng)絡(luò)上的資料,以及自己通過觀察騰訊QQ運(yùn)行時的各種細(xì)節(jié)??梢源_定騰訊QQ是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間UDP直連通信的。并且在兩個客戶端之間不能建立直連的情況下,才由服務(wù)器進(jìn)行中轉(zhuǎn)通信。 </p><p

17、>  其模型如圖1-1  </p><p><b>  圖1.1</b></p><p><b>  詳細(xì)設(shè)計</b></p><p>  通過TCP網(wǎng)絡(luò)編程,主要編寫有客戶端與服務(wù)器端兩個部分,服務(wù)器端通過循環(huán)一直從客戶端接收信息,并通過線程實現(xiàn)多個客戶端連接。服務(wù)器發(fā)送信息則通過定義鏈表保存客

18、戶端信息。每個客戶端向服務(wù)器發(fā)送信息時,則通過鏈表中的所有客戶端的連接而發(fā)送信息給所有客戶端界面從而實現(xiàn)局域網(wǎng)內(nèi)多人聊天。而客戶端則主要是界面的編寫,通過一個線程一直從服務(wù)器獲取信息,如果不為空時就在界面上顯示。</p><p><b>  調(diào)試分析</b></p><p>  首先運(yùn)行服務(wù)器如圖1.2:</p><p><b>  

19、圖1.2</b></p><p>  分析:服務(wù)器進(jìn)入阻塞狀態(tài)。等待連接。</p><p><b>  主要代碼:</b></p><p>  package org.pzhu.net.server;</p><p>  import java.io.IOException;</p><p

20、>  import java.net.ServerSocket;</p><p>  import java.net.Socket;</p><p>  import java.util.ArrayList;</p><p>  import java.util.List;</p><p>  import org.pzhu.net.s

21、erver.thread.ThreadServer;</p><p>  public class Server {//服務(wù)器功能實現(xiàn)</p><p>  private ServerSocket server = null ;</p><p>  public static List<Socket> list = new ArrayLis

22、t<Socket>() ;//定義鏈表儲存客戶信息</p><p>  private Socket client = null ;</p><p>  private int count = 0 ;</p><p>  public Server(){</p><p><b>  try {</b><

23、/p><p>  server = new ServerSocket(8888) ;//創(chuàng)建服務(wù)器</p><p>  } catch (IOException e1) {</p><p>  e1.printStackTrace();</p><p><b>  }</b></p><p>  

24、System.out.println("等待服務(wù)器被連接······");</p><p>  boolean flag = true ;</p><p>  while(flag){</p><p>  synchronized(this){</p><p>&

25、lt;b>  try {</b></p><p>  client = server.accept() ;</p><p>  count++;//記錄客戶連接數(shù)目</p><p>  } catch (IOException e1) {</p><p>  e1.printStackTrace();</p&g

26、t;<p><b>  }</b></p><p>  list.add(client) ;</p><p>  System.out.println("第"+count+"客戶端被連接!");</p><p><b>  try {</b></p>&l

27、t;p>  new Thread(new ThreadServer(client)).start();//定義線程,實現(xiàn)多個客戶端連接</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p>  flag = false ;</p><p><

28、;b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  try {</b></p><p>  server.close();</p><p>  } catch

29、 (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  package

30、 org.pzhu.net.server.thread;</p><p>  import java.io.BufferedReader;</p><p>  import java.io.InputStreamReader;</p><p>  import java.io.PrintStream;</p><p>  import jav

31、a.net.Socket;</p><p>  import java.util.Iterator;</p><p>  import org.pzhu.net.server.util.ListCO;</p><p>  public class ThreadServer implements Runnable{/定義線程,實現(xiàn)多個客戶端連接</p>

32、<p>  private BufferedReader buf = null ;</p><p>  private Socket client = null ;</p><p>  public ThreadServer(Socket client) throws Exception{</p><p>  this.client = client

33、 ;</p><p>  buf=new BufferedReader(new InputStreamReader(this.client.getInputStream())) ;//連接從客戶端獲取信息</p><p><b>  }</b></p><p><b>  @Override</b></p>

34、<p>  public void run(){//線程</p><p>  String str = null ;</p><p>  boolean f = true ;</p><p>  while(f){//一直與連接的客戶端通訊</p><p><b>  try {</b>&

35、lt;/p><p>  str = buf.readLine() ;</p><p>  } catch (Exception e) {</p><p>  f = false ;</p><p><b>  }</b></p><p>  if("bye".equals(str)

36、){</p><p>  f = false ;</p><p><b>  }else{</b></p><p>  ListCO lout = null ;</p><p><b>  try {</b></p><p>  lout = new ListCO();<

37、;/p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  Iterator<PrintStream> iter = lout.getLout().iterator();//向所有的客

38、戶端發(fā)送信息</p><p>  while(iter.hasNext()){</p><p>  PrintStream o = iter.next() ;</p><p>  o.println(str);</p><p><b>  }</b></p><p><b>  }<

39、;/b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  package org.pzhu.net.server.util;</p><p>  impor

40、t java.io.PrintStream;</p><p>  import java.net.Socket;</p><p>  import java.util.ArrayList;</p><p>  import java.util.Iterator;</p><p>  import java.util.List;</p&g

41、t;<p>  import org.pzhu.net.server.Server;</p><p>  public class ListCO {//保存客戶端的連接</p><p>  private List<Socket> list = null ;//通過鏈表保存</p><p>  private List<P

42、rintStream> lout = null ;</p><p>  public ListCO() throws Exception{</p><p>  this.list = Server.list ;</p><p>  lout = new ArrayList<PrintStream>() ;</p><p> 

43、 Iterator<Socket> ilist = list.iterator() ;</p><p>  while(ilist.hasNext()){</p><p>  PrintStream out = null ;</p><p>  Socket c = ilist.next() ;</p><p>  out = n

44、ew PrintStream(c.getOutputStream()) ;</p><p>  lout.add(out) ;</p><p><b>  }</b></p><p><b>  }</b></p><p>  public List<PrintStream> getLo

45、ut() {</p><p>  return lout;</p><p><b>  }</b></p><p>  public void setLout(List<PrintStream> lout) {</p><p>  this.lout = lout;</p><p>&

46、lt;b>  }</b></p><p><b>  }</b></p><p>  2、客戶端的啟動如圖1.3、圖1.4:</p><p><b>  圖1.3</b></p><p>  分析:登錄界面先設(shè)置聊天使用的名字</p><p><b&g

47、t;  圖1.4</b></p><p>  分析:啟動時先輸入聊天姓名,然后才進(jìn)入聊天,這樣就可以進(jìn)行多人聊天了。</p><p><b>  主要代碼:</b></p><p>  package org.pzhu.net.client;</p><p>  import javax.swing.JFra

48、me;</p><p>  import javax.swing.JTextArea;</p><p>  import javax.swing.JLabel;</p><p>  import javax.swing.JScrollPane;</p><p>  import java.awt.Color;</p><p

49、>  import java.awt.Font;</p><p>  import javax.swing.JTextField;</p><p>  import javax.swing.JButton;</p><p>  import java.awt.event.ActionEvent;</p><p>  import jav

50、a.awt.event.ActionListener;</p><p>  import java.io.IOException;</p><p>  import java.io.PrintStream;</p><p>  import java.net.Socket;</p><p>  public class clientAPP {

51、//客戶端界面</p><p>  private JFrame frame;</p><p>  private JTextField textField_1;</p><p>  private JTextField textField_2 = new JTextField() ;</p><p>  private final

52、JTextArea textArea = new JTextArea() ;</p><p>  JLabel lblNewLabel = new JLabel();</p><p>  JButton btnNewButton2 = null ;</p><p>  private Socket client = null ;</p><p&g

53、t;  private PrintStream out = null ;</p><p>  private String name ;</p><p><b>  /**</b></p><p>  * Launch the application.</p><p><b>  */</b><

54、;/p><p>  public static void main(String[] args) {</p><p>  clientAPP window = new clientAPP();</p><p>  window.startAPP();</p><p><b>  }</b></p><p&

55、gt;<b>  /**</b></p><p>  * Create the application.</p><p>  * @return </p><p><b>  */</b></p><p>  public void startAPP() {//登錄界面</p>

56、<p>  final JFrame f = new JFrame("聊天帥名") ;</p><p>  f.getContentPane().setForeground(Color.GREEN);</p><p>  f.getContentPane().setFont(new Font("新宋體", Font.BOLD, 20));&

57、lt;/p><p>  f.setBounds(700, 320, 450, 300);</p><p>  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  f.getContentPane().setLayout(null);</p><p>  JLabel lblNew

58、Label2 = new JLabel("\u8BF7 \u8BBE \u7F6E \u4F60 \u9017 \u540D");</p><p>  lblNewLabel2.setForeground(Color.RED);</p><p>  lblNewLabel2.setBackground(Color.RED);</p><p>  

59、lblNewLabel2.setFont(new Font("新宋體", Font.BOLD, 25));</p><p>  lblNewLabel2.setBounds(108, 23, 226, 50);</p><p>  f.getContentPane().add(lblNewLabel2);</p><p>  textField_

60、2.setForeground(Color.CYAN);</p><p>  textField_2.setFont(new Font("新宋體", Font.BOLD, 22));</p><p>  textField_2.setBounds(130, 97, 168, 41);</p><p>  f.getContentPane().ad

61、d(textField_2);</p><p>  textField_2.setColumns(10);</p><p>  btnNewButton2 = new JButton("\u8FDB\u5165");</p><p>  btnNewButton2.setFont(new Font("微軟雅黑", Font.B

62、OLD, 30));</p><p>  btnNewButton2.setForeground(Color.BLUE);</p><p>  btnNewButton2.setBounds(145, 165, 127, 41);</p><p>  f.getContentPane().add(btnNewButton2);</p><p>

63、;  f.setVisible(true);</p><p>  btnNewButton2.addActionListener(new ActionListener(){</p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent e) {<

64、/p><p>  frame.setVisible(true);//登錄后才顯示聊天界面</p><p>  f.setVisible(false);//隱藏登錄界面</p><p>  lblNewLabel.setText("我叫:"+textField_2.getText());</p><p><b&g

65、t;  }</b></p><p><b>  });</b></p><p><b>  }</b></p><p>  public clientAPP() {</p><p>  initialize();</p><p><b>  }</

66、b></p><p><b>  /**</b></p><p>  * Initialize the contents of the frame.</p><p><b>  */</b></p><p>  private void initialize() {//聊天界面<

67、/p><p>  frame = new JFrame("逗比聊天室 by Puter");</p><p>  frame.getContentPane().setFont(new Font("楷體", Font.BOLD, 18));</p><p>  frame.getContentPane().setForegro

68、und(Color.BLACK);</p><p>  frame.setForeground(Color.RED);</p><p>  frame.setTitle("\u8BA8\u8BBA\u7EC4");</p><p>  frame.setBounds(450, 150, 994, 631);</p><p>

69、;  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  frame.getContentPane().setLayout(null);</p><p>  JLabel label = new JLabel("\u9017\u6BD4\u804A\u5929\u5BA4");</p>

70、;<p>  label.setFont(new Font("楷體", Font.BOLD, 30));</p><p>  label.setForeground(Color.RED);</p><p>  label.setBounds(383, 23, 186, 50);</p><p>  frame.getContentP

71、ane().add(label);</p><p>  JScrollPane scrollPane = new JScrollPane();</p><p>  scrollPane.setBounds(246, 110, 466, 332);</p><p>  frame.getContentPane().add(scrollPane);</p>

72、<p>  textArea.setBackground(Color.BLACK);</p><p>  textArea.setFont(new Font("楷體", Font.BOLD, 17));</p><p>  scrollPane.setViewportView(textArea);</p><p>  textArea

73、.setEnabled(false);</p><p>  final JButton btnNewButton = new JButton("\u53D1\u9001");</p><p>  btnNewButton.setFont(new Font("宋體", Font.BOLD, 15));</p><p>  btn

74、NewButton.setForeground(Color.GREEN);</p><p>  btnNewButton.setBounds(629, 484, 83, 40);</p><p>  frame.getContentPane().add(btnNewButton);</p><p>  textField_1 = new JTextField();&

75、lt;/p><p>  textField_1.setFont(new Font("楷體", Font.BOLD, 17));</p><p>  textField_1.setBounds(246, 484, 361, 40);</p><p>  frame.getContentPane().add(textField_1);</p>

76、<p>  textField_1.setColumns(10);</p><p><b>  try {</b></p><p>  client = new Socket("localhost",8888) ;</p><p>  } catch (IOException e) {</p>&

77、lt;p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  try {</b></p><p>  out = new PrintStream(client.getOutputStream()) ;</p><p>  } cat

78、ch (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  new Thread(new OutInfo(this.textArea,client)).start();//線程時刻刷新聊天界面(客戶端的精華后面附上)</p>

79、<p>  lblNewLabel.setForeground(Color.RED);</p><p>  lblNewLabel.setFont(new Font("新宋體", Font.BOLD, 24));</p><p>  lblNewLabel.setBounds(29, 115, 180, 40);</p><p>  f

80、rame.getContentPane().add(lblNewLabel);</p><p>  if(textField_1.getText() != null){</p><p>  btnNewButton.addActionListener(new ActionListener(){</p><p><b>  @Override</b&g

81、t;</p><p>  public void actionPerformed(ActionEvent e) {</p><p>  if(textField_1.getText() != null){</p><p>  out.println(textField_2.getText()+"說:"+textField_1.getText())

82、;</p><p>  textField_1.setText("");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  });</b></p><p><b> 

83、 }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  package org.pzhu.net.client;</p><p>  import java.io.BufferedReader;</p><p&

84、gt;  import java.io.IOException;</p><p>  import java.io.InputStreamReader;</p><p>  import java.net.Socket;</p><p>  import javax.swing.JTextArea;</p><p>  public clas

85、s OutInfo implements Runnable {//客戶端的精華-實現(xiàn)部分</p><p>  private JTextArea t = null ;//向界面顯示信息</p><p>  private Socket client = null ;</p><p>  private BufferedReader buf = null ;&

86、lt;/p><p>  public OutInfo(JTextArea t,Socket client){</p><p>  this.t = t ;</p><p>  this.client = client ;//界面?zhèn)鬟^來實例化</p><p><b>  }</b></p><p&g

87、t;<b>  @Override</b></p><p>  public void run() {//線程</p><p>  boolean flag = true ;</p><p>  String str = null ;</p><p><b>  try {</b><

88、/p><p>  buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;</p><p>  } catch (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }<

89、;/b></p><p>  while(flag){//一直監(jiān)聽服務(wù)器端口接收信息</p><p>  synchronized(this){</p><p><b>  try {</b></p><p>  str = buf.readLine() ;//接收</p><p&g

90、t;  } catch (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  if(str!=null){</p><p>  System.out.println(str);</p><p>

91、  t.append(str+"\n");//顯示</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

92、<p><b>  }</b></p><p><b>  五、結(jié)論</b></p><p>  收貨很多,學(xué)會了團(tuán)隊合作的重要性,也熟悉了業(yè)務(wù)開發(fā)流程,更重要的是這是對自己所學(xué)的一種總結(jié)。詞程序最主要困難的地方就是服務(wù)器要發(fā)給所有的客戶端,和客戶端要時刻更新接收到服務(wù)器的信息。</p><p><b&g

93、t;  六、實驗分工</b></p><p>  王科茗:55%(+-5%)</p><p>  馮嬌:45%(+-5%)</p><p><b>  七、參考文獻(xiàn)</b></p><p>  [1]朱福喜.《Java語言程序設(shè)計》(第二版).科學(xué)出版社</p><p>  [2]陳國

94、君等.《Java程序設(shè)計基礎(chǔ)》(第二版).清華大學(xué)出版社</p><p>  [3] Deitel.《Java大學(xué)基礎(chǔ)教程》(第六版).電子工業(yè)出版社 </p><p>  [4] MaryCampione.《Java語言導(dǎo)學(xué)》(第四版).機(jī)械工業(yè)出版社</p><p>  [5] Y.Daniel Liang.《Java語言程序設(shè)計基礎(chǔ)篇》(第六版). 機(jī)械工業(yè)

95、出版社</p><p>  [6] Kathy Sierra.《Head First Java》(第二版).東南大學(xué)出版社</p><p>  源代碼(先啟動服務(wù)器才能啟動客戶端,局域網(wǎng)內(nèi)通訊是客戶端的“l(fā)ocalhost”改為“服務(wù)器所在電腦的IP地址”):</p><p><b>  服務(wù)器:</b></p><p>

96、;  package org.pzhu.net.server;</p><p>  import java.io.IOException;</p><p>  import java.net.ServerSocket;</p><p>  import java.net.Socket;</p><p>  import java.util.A

97、rrayList;</p><p>  import java.util.List;</p><p>  import org.pzhu.net.server.thread.ThreadServer;</p><p>  public class Server {</p><p>  private ServerSocket server =

98、 null ;</p><p>  public static List<Socket> list = new ArrayList<Socket>() ;</p><p>  private Socket client = null ;</p><p>  private int count = 0 ;</p><p>

99、;  public Server(){</p><p><b>  try {</b></p><p>  server = new ServerSocket(8888) ;</p><p>  } catch (IOException e1) {</p><p>  e1.printStackTrace();</

100、p><p><b>  }</b></p><p>  System.out.println("等待服務(wù)器被連接······");</p><p>  boolean flag = true ;</p><p>  while(flag){<

101、;/p><p>  synchronized(this){</p><p><b>  try {</b></p><p>  client = server.accept() ;</p><p><b>  count++;</b></p><p>  } catch (IOE

102、xception e1) {</p><p>  e1.printStackTrace();</p><p><b>  }</b></p><p>  list.add(client) ;</p><p>  System.out.println("第"+count+"客戶端被連接!&qu

103、ot;);</p><p><b>  try {</b></p><p>  new Thread(new ThreadServer(client)).start();</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p>

104、<p>  flag = false ;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  try {</b></p><p&

105、gt;  server.close();</p><p>  } catch (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p>&l

106、t;b>  }</b></p><p>  package org.pzhu.net.server.start;</p><p>  import org.pzhu.net.server.Server;</p><p>  public class ServerStart {</p><p>  public static

107、void main(String[] args) {</p><p>  new Server();</p><p><b>  }</b></p><p><b>  }</b></p><p>  package org.pzhu.net.server.thread;</p>&l

108、t;p>  import java.io.BufferedReader;</p><p>  import java.io.InputStreamReader;</p><p>  import java.io.PrintStream;</p><p>  import java.net.Socket;</p><p>  import

109、 java.util.Iterator;</p><p>  import org.pzhu.net.server.util.ListCO;</p><p>  public class ThreadServer implements Runnable{</p><p>  private BufferedReader buf = null ;</p>

110、<p>  private Socket client = null ;</p><p>  public ThreadServer(Socket client) throws Exception{</p><p>  this.client = client ;</p><p>  buf = new BufferedReader(new Input

111、StreamReader(this.client.getInputStream())) ;</p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public void run(){</p><p>  String str = null

112、 ;</p><p>  boolean f = true ;</p><p><b>  while(f){</b></p><p><b>  try {</b></p><p>  str = buf.readLine() ;</p><p>  } catch (Ex

113、ception e) {</p><p>  f = false ;</p><p><b>  }</b></p><p>  if("bye".equals(str)){</p><p>  f = false ;</p><p><b>  }else{<

114、/b></p><p>  ListCO lout = null ;</p><p><b>  try {</b></p><p>  lout = new ListCO();</p><p>  } catch (Exception e) {</p><p>  e.printStack

115、Trace();</p><p><b>  }</b></p><p>  Iterator<PrintStream> iter = lout.getLout().iterator();</p><p>  while(iter.hasNext()){</p><p>  PrintStream o = i

116、ter.next() ;</p><p>  o.println(str);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b&g

117、t;</p><p><b>  }</b></p><p>  package org.pzhu.net.server.util;</p><p>  import java.io.PrintStream;</p><p>  import java.net.Socket;</p><p>  

118、import java.util.ArrayList;</p><p>  import java.util.Iterator;</p><p>  import java.util.List;</p><p>  import org.pzhu.net.server.Server;</p><p>  public class ListCO

119、 {</p><p>  private List<Socket> list = null ;</p><p>  private List<PrintStream> lout = null ;</p><p>  public ListCO() throws Exception{</p><p>  this.lis

120、t = Server.list ;</p><p>  lout = new ArrayList<PrintStream>() ;</p><p>  Iterator<Socket> ilist = list.iterator() ;</p><p>  while(ilist.hasNext()){</p><p>

121、;  PrintStream out = null ;</p><p>  Socket c = ilist.next() ;</p><p>  out = new PrintStream(c.getOutputStream()) ;</p><p>  lout.add(out) ;</p><p><b>  }</b&

122、gt;</p><p><b>  }</b></p><p>  public List<PrintStream> getLout() {</p><p>  return lout;</p><p><b>  }</b></p><p>  public v

123、oid setLout(List<PrintStream> lout) {</p><p>  this.lout = lout;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  客戶端:</b></

124、p><p>  package org.pzhu.net.client;</p><p>  import javax.swing.JFrame;</p><p>  import javax.swing.JTextArea;</p><p>  import javax.swing.JLabel;</p><p>  i

125、mport javax.swing.JScrollPane;</p><p>  import java.awt.Color;</p><p>  import java.awt.Font;</p><p>  import javax.swing.JTextField;</p><p>  import javax.swing.JButto

126、n;</p><p>  import java.awt.event.ActionEvent;</p><p>  import java.awt.event.ActionListener;</p><p>  import java.io.IOException;</p><p>  import java.io.PrintStream;&

127、lt;/p><p>  import java.net.Socket;</p><p>  public class clientAPP {</p><p>  private JFrame frame;</p><p>  private JTextField textField_1;</p><p>  private

128、 JTextField textField_2 = new JTextField() ;</p><p>  private final JTextArea textArea = new JTextArea() ;</p><p>  JLabel lblNewLabel = new JLabel();</p><p>  JButton btnNewButton2

129、 = null ;</p><p>  private Socket client = null ;</p><p>  private PrintStream out = null ;</p><p>  private String name ;</p><p><b>  /**</b></p>&l

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論