熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

瘋狂Java講義:加入多線程[2]

2022-06-13   來源: Java高級技術 

  當服務器線程讀到客戶端數據之後程序遍歷socketList集合並將該數據向socketList集合中的每個Socket發送一次該服務器線程將把從Socket中讀到的數據向socketList中的每個Socket轉發一次如run()線程執行體中的粗體字代碼所示

  每個客戶端應該包含條線程一條負責讀取用戶的鍵盤輸入並將用戶輸入的數據寫入Socket對應的輸出流中一條負責讀取Socket對應輸入流中的數據(從服務器發送過來的數據)並將這些數據打印輸出其中負責讀取用戶鍵盤輸入的線程由Myclient負責也就是由程序的主線程負責客戶端主程序代碼如下

  程序清單codes///MultiThread/client/MyClientjava

  public class MyClient

  {

  public static void main(String[] args)throws Exception

  {

  Socket s = s = new Socket(

  //客戶端啟動ClientThread線程不斷讀取來自服務器的數據

  new Thread(new ClientThread(s))start()                                //①

  //獲取該Socket對應的輸出流

  PrintStream ps = new PrintStream(sgetOutputStream())

  String line = null;

  //不斷讀取鍵盤輸入

  BufferedReader br = new BufferedReader(new InputStreamReader(Systemin))

  while ((line = brreadLine()) != null)

  {

  //將用戶的鍵盤輸入內容寫入Socket對應的輸出流

  psprintln(line)

  }

  }

  }

  上面程序中獲取鍵盤輸入的代碼在第章中已有詳細解釋此處不再贅述當該線程讀到用戶鍵盤輸入的內容後將用戶鍵盤輸入的內容寫入該Socket對應的輸出流

  除此之外當主線程使用Socket連接到服務器之後並啟動了ClientThread來處理該線程的Socket通信如程序中①號代碼所示

  ClientThread線程負責讀取Socket輸入流中的內容並將這些內容在控制台打印出來

  程序清單codes///MultiThread/client/ClientThreadjava

  public class ClientThread implements Runnable

  {

  //該線程負責處理的Socket

  private Socket s;

  //該現成所處理的Socket所對應的輸入流

  BufferedReader br = null;

  public ClientThread(Socket s)

  throws IOException

  {

  thiss = s;

  br = new BufferedReader(

  new InputStreamReader(sgetInputStream()))

  }

  public void run()

  {

  try

  {

  String content = null;

  //不斷讀取Socket輸入流中的內容並將這些內容打印輸出

  while ((content = brreadLine()) != null)

  {

  Systemoutprintln(content)

  }

  }

  catch (Exception e)

  {

  eprintStackTrace()

  }

  }

  }

  上面線程的功能也非常簡單它只是不斷獲取Socket輸入流中的內容當獲取Socket輸入流中的內容後直接將這些內容打印在控制台如上程序中粗體字代碼所示

  先運行上面程序中的MyServer類該類運行後只是作為服務器看不到任何輸出接著可以運行多個MyClient相當於啟動多個聊天室客戶端登錄該服務器接著可以看到我們在任何一個客戶端通過鍵盤輸入一些內容後單擊回車將可看到所有客戶端(包括自己)都會在控制台收到他剛剛輸入的內容這就粗略實現了一個C/S結構聊天室的功能

       返回目錄瘋狂Java講義

       編輯推薦

       Java程序性能優化讓你的Java程序更快更穩定

       新手學Java 編程

       Java程序設計培訓視頻教程

[]  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27784.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.