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

Java網絡編程-Java Socket編程(二)

2022-06-13   來源: Java核心技術 

  在Java中面向連接的類有兩種形式它們分別是客戶端和服務器端客戶端這一部分是最簡單的所以我們先討論它

  列表列出了一個簡單的客戶端的程序它向一個服務器發出一個請求取回一個HTML文檔並把它顯示在控制台上

  一個簡單的socket客戶端

  import javaio*;
  import javanet*;
  /**
  * 一個簡單的從服務器取回一個HTML頁面的程序
  * 注意:merlin是本地機器的名字
  */
  public class SimpleWebClient
   {
   public static void main(String args[])
    {
    try
     {
     // 打開一個客戶端socket連接
     Socket clientSocket = new Socket(merlin );
     Systemoutprintln(Client: + clientSocket);
     // 取得一個網頁
     getPage(clientSocket);
     }
    catch (UnknownHostException uhe)
     {
     Systemoutprintln(UnknownHostException: + uhe);
     }
    catch (IOException ioe)
     {
     Systemerrprintln(IOException: + ioe);
     }
    }
   /**
   *通過建立的連接請求一個頁面顯示回應然後關閉socket
   */
  public static void getPage(Socket clientSocket)
   {
   try
    {
    // 需要輸入和輸出流
    DataOutputStream outbound = new DataOutputStream(
    clientSocketgetOutputStream() );
    DataInputStream inbound = new DataInputStream(
    clientSocketgetInputStream() );
    // 向服務器發出HTTP請求
    outboundwriteBytes(GET / HTTP/ );
    // 讀出回應
    String responseLine;
    while ((responseLine = inboundreadLine()) != null)
     {
     // 把每一行顯示出來
     Systemoutprintln(responseLine);
     if ( responseLineindexOf() != )
     break;
     }
    // 清除
    outboundclose();
    inboundclose();
    clientSocketclose();
    }
    catch (IOException ioe)
     {
     Systemoutprintln(IOException: + ioe);
     }
    }
   }

  Java面向連接的類回憶一個客戶端向一個正在監聽的服務器socket發出一個連接客戶端的sockets是用Socket類建立的下面的程序建立了一客戶端的socket並且連接到了一個主機
  
  Socket clientSocket = new Socket(merlin );

  第一個參數是你想要連接的主機的名稱第二個參數是端口號一個主機名稱指定了目的的名稱端口號指定了由哪個應用程序來接收在我們的情況下必須指定因為它是默認的HTTP協議的端口另外的知名的端口列在表看知名的端品

  echo
  daytime
  daytime
  ftp
  telnet
  smtp
  finger
  http
  pop

  因為Socket類是面向連接的它提供了一個可供讀寫的流接口javaio包中的類可以用來訪問一個已連接的socket
  
  DataOutputStream outbound = new DataOutputStream(clientSocketgetOutputStream() );
  DataInputStream inbound = new DataInputStream( clientSocketgetInputStream());

  一旦流建立了一般的流操作就可以做了

  outboundwriteBytes(GET / HTTP/ );
  String responseLine;
  while ( (responseLine = inboundreadLine()) != null)
   {
   Systemoutprintln(responseLine);
   }

  的小程序請求了一個WEB頁面並且把它顯示出來當程序完成之後連接必須關閉

  outboundclose();
  inboundclose();
  clientSocketclose();

  注意socket流必須首先關所有的的socket流必須在socket關閉之前關閉這個小程序非常地簡單但是所有的客戶端程序都必須遵首下面的基本的步驟

  建立客戶端socket連接
  得到socket的讀和寫的流
  利用流
  關閉流
  關閉socket

  使用一個服務器端的socket只是有一點復雜它將在下面講到


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