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

利用Socket進行Java網絡編程(二)

2013-11-23 18:59:55  來源: Java核心技術 

  作者 郗旻
  二建立客戶端代碼
    相比服務器端客戶端要簡單一些客戶端只需用服務器所在機器的ip以及服務器的端口作為參數創建一個Socket對象得到這個對象後就可以用建立服務器部分介紹的方法實現數據的輸入和輸出
  Socket socket = new Socket();
  in = new BufferedReader(new InputStreamReader(socketgetInputStream()));
  out = new PrintWriter(socketgetOutputStream()true);
    以上的程序代碼建立了一個Socket對象這個對象連接到ip地址為的主機上端口為的服務器對象並且建立了輸入流和輸出流分別對應服務器的輸出和客戶端的寫入
    三建立用戶界面
    讀者可以根據自己的喜好建立自己的用戶界面這不是本文的重點
    經過以上三個步驟就可以建立一個比較簡單的對話程序但是為了使這個程序更加完善應進行以下幾個改進
    一現在服務器只能服務一個客戶也就是單線程的可以將它改進為多線程服務器
  try
  { file://建立服務器
   ServerSocket server = new ServerSocket();
   int i=;
   for(;;)
   {
    Socket incoming = serveraccept();
    new ServerThread(incomingi)start();
    i++;
   }
  }catch (IOException ex){ exprintStackTrace(); }
    循環檢測是否有客戶連接到服務器上如果有則創建一個線程來服務這個客戶這個線程的名稱是ServerThread這個類擴展了Thread類它的編寫方法與前述的服務器的寫法相同
    二為了可以隨時得到對方傳送過來的消息可以在服務器以及客戶端各建立一個獨立的線程來察看輸入流如果輸入流中有輸入則可以即時顯示出來代碼如下
  new Thread()
  {
   public void run()
   {
    try
    { 
     while(true)
     {
      checkInput();
      sleep();//每毫秒檢測一次
     }
    }catch(InterruptedException ex)
   {
   }catch(IOException ex)
   {
    }
   }
  }start();
  其中的checkInput()方法為
  private void checkInput() throws IOException
  {
   String line;
   if((line=inreadLine())!=null) file://檢測輸入流中是否有新的數據
    tsetPartner(line); file://將數據流中的消息顯示出來
  }
    通過以上改進程序就可以比較好的運行了
  
  
  
  

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