成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java在Client/Server中應用

開發 后端
和Internet上的許多環境一樣,完整的Java應用環境實際上也是一個客戶機/服務器環境,更確切地說是瀏覽器/服務器模型。本文將為你詳述Java在Client/Server中的應用,希望對你能有所幫助。

   JavaClient/Server中應用

  一. Java網絡應用模型

  和Internet上的許多環境一樣,完整的Java應用環境實際上也是一個客戶機/服務器環境,更確切地說是瀏覽器/服務器模型(即Browser/Server模型,簡稱Web模型)。但與傳統的客戶機/服務器(C/S) 的二層結構不同,應用Java的Web模型是由三層結構組成的。傳統的C/S結構通過消息傳遞機制,由客戶端發出請求給服務器,服務器進行相應處理后經傳遞機制送回客戶端。而在Web模型中,服務器一端被分解成兩部分:一部分是應用服務器(Web 服務器),另一部分是數據庫服務器。

  針對分布式計算環境,Java通過其網絡類庫提供了良好的支持。對數據分布,Java提供了一個URL(Uniform Resource Locator) 對象, 利用此對象可打開并訪問網絡上的對象,其訪問方式與訪問本地文件系統幾乎完全相同。對操作分布,Java的客戶機/ 服務器模式可以把運算從服務器分散到客戶一端(服務器負責提供查詢結果,客戶機負責組織結果的顯示),從而提高整個系統的執行效率,增加動態可擴充性。Java網絡類庫是Java 語言為適應Internet 環境而進行的擴展。另外,為適應Internet的不斷發展,Java還提供了動態擴充協議,以不斷擴充Java網絡類庫。

  Java的網絡類庫支持多種Internet協議,包括Telnet, FTP 和HTTP (WWW),與此相對應的Java網絡類庫的子類庫為:

  Java.net

  Java.net.ftp

  Java.net.www.content

  Java.net.www.html

  Java.net.www.http

  這些子類庫各自容納了可用于處理Internet協議的類和方法。其中,java.net用于處理一些基本的網絡功能,包括遠程登錄(Telnet);java.net.ftp用于處理ftp協議;java.net.www.content用于處理WWW 頁面內容;java.net.www.html 和java.net.www.http 則分別提供了對HTML 語言和HTTP 協議的支持。

  二. 客戶機/服務器環境下的Java應用程序

  客戶機/服務器在分布處理過程中,使用基于連接的網絡通信模式。該通信模式首先在客戶機和服務器之間定義一套通信協議,并創建一Socket類,利用這個類建立一條可靠的鏈接;然后,客戶機/服務器再在這條鏈接上可靠地傳輸數據。客戶機發出請求,服務器監聽來自客戶機的請求,并為客戶機提供響應服務。這就是典型的"請求-- 應答" 模式。下面是客戶機/服務器的一個典型運作過程:

  1、服務器監聽相應端口的輸入;

  2、客戶機發出一個請求;

  3、服務器接收到此請求;

  4、服務器處理這個請求,并把結果返回給客戶機;

  5、重復上述過程,直至完成一次會話過程。

  按照以上過程,我們使用Java語言編寫一個分別針對服務器和客戶機的應用程序(Application)。該程序在服務器上時,程序負責監聽客戶機請求,為每個客戶機請求建立Socket 連接,從而為客戶機提供服務。本程序提供的服務為:讀取來自客戶機的一行文本,反轉該文本,并把它發回給客戶機。

  通過該程序實例我們看到,使用Java語言設計C/S程序時需要注意以下幾點:

  (1) 服務器應使用ServerSocket 類來處理客戶機的連接請求。當客戶機連接到服務器所監聽的端口時,ServerSocket將分配一新的Socket 對象。這個新的Socket 對象將連接到一些新端口,負責處理與之相對應客戶機的通信。然后,服務器繼續監聽ServerSocket,處理新的客戶機連接。

  Socket 和ServerSocket 是Java網絡類庫提供的兩個類。

  (2) 服務器使用了多線程機制。Server對象本身就是一個線程,它的run()方法是一個無限循環,用以監聽來自客戶機的連接。每當有一個新的客戶機連接時,ServerSocket就會創建一個新的Socket類實例,同時服務器也將創建一新線程,即一個Connection 對象,以處理基于Socket 的通信。與客戶機的所有通信均由這個Connection 對象處理。Connection的構造函數將初始化基于Socket 對象的通信流,并啟動線程的運行。與客戶機 的通信以及服務的提供,均由Connection對象處理。

  (3) 客戶機首先創建一Socket對象,用以與服務器通信。之后需創建兩個對象:DataInputStream 和PrintStream,前者用以從Socket 的InputStream 輸入流中讀取數據,后者則用于往Socket的OutputStream 中寫數據。***,客戶機程序從標準輸入(如:控制臺)中讀取數據,并把這些數據寫到服務器,在從服務器讀取應答消息,然后把這些應答消息寫到準輸出。

  以下分別為服務器和客戶機端的源程序清單。本程序在NT 4.0 網絡環境(TCP/IP)下使用JDK1.1 調試通過。

#p#

  三. 編寫服務器類Java程序

  1. // Server.java  
  2.     import java.io.*;  
  3.     import java.net.*;  
  4.     public class Server extends Thread  
  5.     {  
  6.     public final static int Default_Port=6543;  
  7.     protectd int port;  
  8.     protectd ServerSockt listen_socket;  
  9.     // 定義出錯例程:如果出現異常錯誤,退出程序。  
  10.     Public static void fail(Exception e, String msg)  
  11.     {  
  12.     System.err.println(msg + ": " + e);  
  13.     System.exit(1);  
  14.     }  
  15.     // 定義并啟動服務器的Socket 例程,監聽客戶機的連接請求。  
  16.     public Server(int port)  
  17.     {  
  18.     if(port == 0) port = Default_Port;  
  19.     this.port = port;  
  20.     try 
  21.     {  
  22.     listen_socket = new ServerSocket(port);  
  23.     }  
  24.     catch(IOException e) fail(e, "Exception creating server socket");  
  25.     System.out.println("Server: listening on port" + port);  
  26.     This.start();  
  27.     }  
  28. /* 下面為服務器監聽線程的主程序。該線程一直循環執行,監聽并接受客戶機發出的連接請求。對每一個連接,均產生一個連接對象與之對應,通過Socket 通道進行通信。*/ 
  29.     public void run()  
  30.     {  
  31.     try 
  32.     {  
  33.     while(true)  
  34.     {  
  35.     Socket client_socket = listen_socket.accept();  
  36.     Connection c = new Connection(client_socket);  
  37.     }  
  38.     }  
  39.     catch(IOException e) fail(e,"Exception while listening for connections")  
  40.     }  
  41.     // 啟動服務器主程序  
  42.     public static void main(String args[])  
  43.     {  
  44.     int port = 0;  
  45.     if (args.length == 1)  
  46.     {  
  47.     try port = Integer.parseInt(args[0]);  
  48.     catch(NumberFormatException e) port = 0;  
  49.     }  
  50.     new Server(port);  
  51.     // End of the main  
  52.     } // End of Server class  
  53.     //以下定義了Connection 類,它是用來處理與客戶機的所有通信的線程。  
  54.     class Connection extends Thread  
  55.     {  
  56.     protected Socket client;  
  57.     protected DataInputStream in;  
  58.     protected PrintStream out;  
  59.     // 初始化通信流并啟動線程  
  60.     public Connection(Socket client_socket)  
  61.     {  
  62.     client = client_socket;  
  63.     try 
  64.     {  
  65.     in = new DataInputStream(client.getinputStream());  
  66.     out = new PrintStream(client.getOutputStream());  
  67.     }  
  68.     catch(IOException e)  
  69.     {  
  70.     try client.close();  
  71.     catch(IOException e2);  
  72.     System.err.println("Exception while getting socket streram: " + e);  
  73.     Return;  
  74.     }  
  75.     this.start;  
  76.     } // End of Connection method  
  77.     // 服務例程:讀出一行文本;反轉文本;返回文本。  
  78.     public void run()  
  79.     {  
  80.     String line;  
  81.     StringBuffer revline;  
  82.     int len;  
  83.     try 
  84.     {  
  85.     for(;;)  
  86.     {  
  87.     // Read a line  
  88.     line = in.readline();  
  89.     if(line == nullbreak;  
  90.     // Reverse the line  
  91.     len = line.length();  
  92.     revline = new StringBuffer(len);  
  93.     for(int i = len-1; i >=0; i--)  
  94.     revline.insert(len-1-I;line.charAt(i));  
  95.     // Write out the reverse line  
  96.     out.println(revline);  
  97.     }  
  98.     catch(IOException e);  
  99.     finally try client.close();  
  100.     catch(IOException e2);  
  101.     }  
  102.     // End of run method  
  103.     }  
  104.     // End of Connection class 

  四. 編寫客戶機類Java 程序

  1. // Client.java  
  2.     import java.io.*;  
  3.     import java.net.*;  
  4.     public class Client extends 
  5.     {  
  6.     public static final int Default_Port = 6543;  
  7.     // 定義出錯例程  
  8.     public static final void usage()  
  9.     {  
  10.     System.out.println("Usage: Java Client []");  
  11.     System.exit(0);  
  12.     }  
  13.     public static void main(String args[])  
  14.     {  
  15.     int port = Default_Port;  
  16.     Socket s = null;  
  17.     // 解析端口參數  
  18.     if ((args.length != 1)&&(args.length != 2 )) usage();  
  19.     if (args.length == 1)  
  20.     port = Default_Port;  
  21.     else 
  22.     {  
  23.     try port = Integer.parseInt(args[1]);  
  24.     catch(NumberFormaatException e) usage();  
  25.     }  
  26.     try{  
  27.     // 產生一個Socket ,通過指定的端口與主機通信。  
  28.     s = new Socket(args[0], port);  
  29.     // 產生用于發出和接收的文本字符流  
  30.     DataInputStream sin = new DataInputStream(s.getInputStream());  
  31.     PrintStream sout = new DataInputStream(s.getInputStream());  
  32.     // 從控制臺讀入字符流  
  33.     DataInputStream in = new DataInputStream(System.in);  
  34.     // 返回連接的地址和端口  
  35.     ystem.out.println("Connected to"+s.getInetAddress()+":"+ s.getPort());  
  36.     String line;  
  37.     For(;;)  
  38.     {  
  39.     // 顯示提示符  
  40.     System.out.print(" >");  
  41.     System.out.flush();  
  42.     // 讀入控制臺輸入的一行字符  
  43.     line = in.readline();  
  44.     if (line == nullbreak;  
  45.     // 將接收的文本行送至服務器  
  46.     sout.println(line);  
  47.     // 從服務器接收一行字符  
  48.     line = sin.readline();  
  49.     // Check if connection is closed(i.e. for EOF)  
  50.     if(line == null)  
  51.     {  
  52.     System.out.println("Connection closed by server.");  
  53.     Break;  
  54.     }  
  55.     // 在控制臺上顯示接收的字符  
  56.     System.out.println(line);  
  57.     }  
  58.     // End of for loop  
  59.     }  
  60.     // End of try  
  61.     catch(IOException e ) System.err.println(e);  
  62.     // Always be sure to close the socket  
  63.     finally 
  64.     {  
  65.     try if(s != null) s.close();  
  66.     catch(IOException e2);  
  67.     }  
  68.     } // End of main  
  69.     } // End of Client  

  運行該客戶機程序時,必須以服務器主機名作為***個參數,服務器端口號為第二個參數,其中服務器端口號可缺省。

【編輯推薦】

  1. 8.4 Client/Server工作模式
  2. 學習java編程的八大優勢
  3. 用Java做互聯網開發優勢何在?
  4. 20道Java入門習題
  5. 高手支招 Java經驗分享(一)
責任編輯:韓亞珊 來源: 中國IT實驗室
相關推薦

2011-04-01 12:19:21

SQL Server商業智能

2011-05-17 10:49:55

OracleSQL Server

2009-06-11 13:52:25

協同軟件Java

2010-08-06 12:34:15

NFS ServerClient

2012-09-04 14:52:28

Puppet

2024-12-17 07:41:34

Java逃逸分析

2023-03-24 09:07:22

SignalsJavaScript應用

2017-09-06 14:56:09

深度學習CTR應用

2009-02-27 16:22:34

AjaxProAjax.NET

2010-06-03 18:00:28

2023-12-29 09:01:10

SwiftUI空狀態Product?

2017-09-04 14:40:00

LimitLatchTomcat線程

2020-05-22 10:40:33

ContinuatioJS前端

2024-09-30 11:51:07

2010-09-25 11:32:06

cisco dhcp

2010-07-27 10:38:02

NFS ServerNFS Client

2010-07-06 15:02:12

SQL Server

2009-06-17 15:43:07

2010-06-28 18:21:36

UML類圖設計

2011-07-15 16:30:19

WINS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清免费视频 | 日韩欧美手机在线 | 亚洲成人精品久久久 | 中文字幕一区二区不卡 | 中文字幕观看 | 国产精品一区二区三区四区 | 成人国产精品视频 | 精品粉嫩aⅴ一区二区三区四区 | 天天色综| 亚洲毛片 | 91影片| 中文在线a在线 | 日本成人在线网址 | 久草青青草 | 亚洲一区国产精品 | 超碰97免费在线 | 日韩精品免费在线观看 | 成人精品一区二区三区中文字幕 | 在线观看成年视频 | 久久久蜜桃 | 亚洲视频欧美视频 | 国产精品亚洲一区 | 精品一区二区三区四区五区 | 99亚洲精品视频 | 久久久成人免费一区二区 | 瑞克和莫蒂第五季在线观看 | 一区二区三区中文字幕 | 99精品久久久| a免费视频 | 午夜精品久久久久久久星辰影院 | 欧美精品一区二区三区在线四季 | 国产精品资源在线 | 欧美成年人视频在线观看 | 四虎影院新网址 | 激情一区二区三区 | 亚洲精品久久久久中文字幕欢迎你 | 成人在线播放网址 | 欧洲精品久久久久毛片完整版 | chengrenzaixian| 久久亚洲欧美日韩精品专区 | 亚洲九九色 |