Java 在Client/Server 中應用
Java 在Client/Server 中應用[@more@] 一、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.
Java.net.
Java.net.
這些子類庫各自容納了可用於處理Internet協議的類和方法。其中,java.net用於處理一些基本的網路功能,包括遠端登入(Telnet);java.net.ftp用於處理ftp協議;java.net.用於處理WWW 頁面內容;java.net. 和java.net. 則分別提供了對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 除錯透過。
三、編寫伺服器類Java程式
// Server.java
import java.io.*;
import java.net.*;
public class Server extends Thread
{
public final static int Default_Port=6543;
protectd int port;
protectd ServerSockt listen_socket;
// 定義出錯例程:如果出現異常錯誤,退出程式。
Public static void fail(Exception e, String msg)
{
System.err.println(msg + ": " + e);
System.exit(1);
}
// 定義並啟動伺服器的Socket 例程,監聽客戶機的連線請求。
public Server(int port)
{
if(port == 0) port = Default_Port;
this.port = port;
try
{
listen_socket = new ServerSocket(port);
}
catch(IOException e) fail(e, "Exception creating server socket");
System.out.println("Server: listening on port" + port);
This.start();
}
/* 下面為伺服器監聽執行緒的主程式。該執行緒一直迴圈執行,監聽並接受客戶機發出的連線
請求。對每一個連線,均產生一個連線物件與之對應,透過Socket 通道進行通訊。*/
public void run()
{
try
{
while(true)
{
Socket client_socket = listen_socket.accept();
Connection c = new Connection(client_socket);
}
}
catch(IOException e) fail(e,"Exception while listening for connections")
}
和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.
Java.net.
Java.net.
這些子類庫各自容納了可用於處理Internet協議的類和方法。其中,java.net用於處理一些基本的網路功能,包括遠端登入(Telnet);java.net.ftp用於處理ftp協議;java.net.用於處理WWW 頁面內容;java.net. 和java.net. 則分別提供了對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 除錯透過。
三、編寫伺服器類Java程式
// Server.java
import java.io.*;
import java.net.*;
public class Server extends Thread
{
public final static int Default_Port=6543;
protectd int port;
protectd ServerSockt listen_socket;
// 定義出錯例程:如果出現異常錯誤,退出程式。
Public static void fail(Exception e, String msg)
{
System.err.println(msg + ": " + e);
System.exit(1);
}
// 定義並啟動伺服器的Socket 例程,監聽客戶機的連線請求。
public Server(int port)
{
if(port == 0) port = Default_Port;
this.port = port;
try
{
listen_socket = new ServerSocket(port);
}
catch(IOException e) fail(e, "Exception creating server socket");
System.out.println("Server: listening on port" + port);
This.start();
}
/* 下面為伺服器監聽執行緒的主程式。該執行緒一直迴圈執行,監聽並接受客戶機發出的連線
請求。對每一個連線,均產生一個連線物件與之對應,透過Socket 通道進行通訊。*/
public void run()
{
try
{
while(true)
{
Socket client_socket = listen_socket.accept();
Connection c = new Connection(client_socket);
}
}
catch(IOException e) fail(e,"Exception while listening for connections")
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10901326/viewspace-965474/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java在Client/Server網路中的應用 (轉)JavaclientServer
- 堆在java中的應用--PriorityQueueJava
- sqlserver在JAVA中的應用 (轉)SQLServerJava
- 設計模式,及在Java中的應用設計模式Java
- 按位運算子在java中的應用?Java
- 《Client-Server Web Apps with JavaScript and Java》選讀:什麼是Client-Server Web App?clientServerWebAPPJavaScript
- 在AIX 5L上配置NFS Server/ClientAINFSServerclient
- Oracle與SQL Server在企業應用中的比較(轉)OracleSQLServer
- CAS原子操作以及其在Java中的應用Java
- Java 註解及其在 Android 中的應用JavaAndroid
- Java反射以及在Android中的特殊應用Java反射Android
- Vector在Java程式設計中的應用 (轉)Java程式設計
- 在 Java 應用程式中訪問USB裝置Java
- MVC模式在Java Web應用程式中的實現MVC模式JavaWeb
- Thrift使用入門(2) - 用Thrift實現一個簡單的Server/Client應用程式Serverclient
- sql server中的hash應用優化SQLServer優化
- 深入理解Java ClassLoader及在 JavaAgent 中的應用Java
- 使用shell指令碼在Linux中管理Java應用程式指令碼LinuxJava
- 【Java併發】【AQS鎖】鎖在原始碼中的應用JavaAQS原始碼
- MySQL client server 協議MySqlclientServer協議
- Refs 在React中的應用React
- MQTT 在 Elixir 中的應用MQQT
- HMM在NLP中的應用HMM
- SSD在SQLServer中的應用SQLServer
- HugePage在mysql中的應用MySql
- HugePage在oracle中的應用Oracle
- sar 在unix中的應用
- 在 Java 應用程式中使用 ElasticsearchJavaElasticsearch
- 如何把遺留的Java應用託管在Service Fabric中Java
- Calendar類在Java中的應用與日期時間處理Java
- 在 go websocket server 與 javascript websocket client 互動中使用 flatbuffersGoWebServerJavaScriptclient
- 在容器中執行Java應用程式的提示和工具 - Even HoltheJava
- 在Java 11中建立一個簡單的模組化應用教程Java
- 26.RSA加密解密在Java專案中的簡單應用加密解密Java
- Jenkins在Java web專案CI/CD中的簡單應用JenkinsJavaWeb
- Java技術在多資料庫系統中的應用研究Java資料庫
- Java反射全解析(使用、原理、問題、在Android中的應用)Java反射Android
- Java代理以及在Android中的一些簡單應用JavaAndroid