網絡上的系統結構多為客戶/服務器模式
服務器端負責數據和圖像等的存儲
維護
管理以及傳遞
客戶端則負責人機界面的操作
送出需求及顯示收回的數據
下面介紹一下如何使用JAVA來進行網絡編程
) 由於客戶端通過IE同服務器建立聯系
所以客戶端使用Applet
服務器端使用Application
) 服務器應設置成多線程
應答多個客戶的請求
) 兩端通信使用SOCKET機制
Java中輸入/輸出流概念
過濾流DataInputStream 和DataOutputStream 除了分別作為FilterInputStream 和FilterOutputStream的子類外
還分別實現了接口DataInput 和DataOutput
接口DataInput 中定義的方法主要包括從流中讀取基本類型的數據
讀取一行數據
或者讀取指定長度的字節數
如readBoolean() readInt()
readLine()
readFully()等
接口DataOutput中定義的方法主要是向流中寫入基本類型的數據或者寫入一定長度的字節數組
如writeChar()
writeDouble() DataInputStream可以從所連接的輸入流中讀取與機器無關的基本類型數據
用以實現一種獨立於具體平台的輸入方式
DataInputStream 可以向所連接的輸出流寫入基本類型的數據
Socket 機制 Socket是面向客戶/服務器模型設計的
網絡上的兩個程序通過一個雙向的通訊連接實現數據的交換
這個雙向鏈路的一端稱為一個Socket
Socket通常用來實現客戶方和服務方的連接
客戶程序可以向Socket寫請求
服務器將處理此請求
然後通過Socket將結果返回給用戶
Socket通信機制提供了兩種通訊方式
有聯接和無聯接方式
分別面向不同的應用需求
使用有聯接方式時
通信鏈路提供了可靠的
全雙工的字節流服務
在該方式下
通信雙方必須創建一個聯接過程並建立一條通訊鏈路
以後的網絡通信操作完全在這一對進程之間進行
通信完畢關閉此聯接過程
使用無聯接方式時其系統開銷比無聯接方式小
但通信鏈路提供了不可靠的數據報服務
不能保證信源所傳輸的數據一定能夠到達信宿
在該方式下
通信雙方不必創建一個聯接過程和建立一條通訊鏈路
網絡通信操作在不同的主機和進程之間轉發進行
Java語言簡介 Java語言的優點主要表現在
簡單
面向對象
多線程
分布性
體系結構中立
安全性等方面
(
) 簡單性
Java與C++語言非常相近
但Java比C++簡單
它拋棄了C++中的一些不是絕對必要的功能
如頭文件
預處理文件
指針
結構
運算符重載
多重繼承以及自動強迫同型
Java實現了自動的垃圾收集
簡化了內存管理的工作
這使程序設計更加簡便
同時減少了出錯的可能
(
) 面向對象
Java提供了簡單的類機制和動態的構架模型
對象中封裝了它的狀態變量和方法
很好地實現了模塊化和信息隱藏
而類則提供了一類對象的原型
通過繼承和重載機制
子類可以使用或重新定義父類或超類所提供的方法
從而既實現了代碼的復用
又提供了一種動態的解決方案
Java是一種完全面向對象的程序設計語言
它除了數組
布爾和字符三個基本數據類型外的其它類都是對象
它不再支持全局變量
在Java中
如果不創建新類就無法創建程序
Java程序在運行時必須先創建一個類的實例
然後才能提交運行
Java同樣支持繼承特性
Java的類可以從其它類中繼承行為
但Java只支持類的單重繼承
即每個類只能從一個類中繼承
Java支持界面
界面允許程序員定義方法但又不立即實現
一個類可以實現多個界面
利用界面可以得到多重繼承的許多優點而又沒有多重繼承的問題
(
) 多線程
多線程使應用程序可以同時進行不同的操作
處理不同的事件
在多線程機制中
不同的線程處理不同的任務
他們之間互不干涉
不會由於一處等待影響其他部分
這樣容易實現網絡上的實時交互操作
Java程序可以有多個執行線程
如可以讓一個線程進行復雜的計算
而讓另一個線程與用戶進行交互
這樣用戶可以在不中斷計算線程的前提下與系統進行交互
多線程保證了較高的執行效率
(
) 分布性
Java是面向網絡的語言
通過它提供的類庫可以處理TCP/IP協議
用戶可以通過URL地址在網絡上很方便的訪問其他對象
(
) 體系結構中立
Java是一種網絡語言
為使Java程序能在網絡的任何地方運行
Java解釋器生成與體系結構無關的字節碼結構的文件格式
Java為了做到結構中立
除生成機器無關的字節碼外
還制定了完全統一的語言文本
如Java的基本數據類型不會隨目標機的變化而變化
一個整型總是
位
一個長整型總是
位
為了使Java的應用程序能不依賴於具體的系統
Java語言環境還提供了用於訪問底層操作系統功能的類組成的包
當程序使用這些包時
可以確保它能運行在各種支持Java的平台上
java
lang: 一般的語言包
其中包括用於字符串處理
多線程
異常處理和數字函數等的類
該包是實現Java程序運行平台的基本包
java
util: 實用工具包
其中包括哈希表
堆棧
時間和日期等
java
io: 基於流模型的輸入/輸出包
該包用統一的流模型實現了各種格式的輸入/輸出
包括文件系統
網絡和設備的輸入/輸出等
: 網絡包
該包支持TCP/IP協議
其中提供了socket
URL和WWW的編程接口
java
awt: 抽象窗口工具集
其中實現了可以跨平台的圖形用戶界面組件
包括窗口
菜單
滾動條和對話框等
java
applet: 支持applet程序設計的基本包
(
) 安全性
用於網絡
分布環境下的Java必須要防止病毒的入侵
Java不支持指針
一切對內存的訪問都必須通過對象的實例變量來實現
這樣就防止了程序員使用欺騙手段訪問對象的私有成員
同時也避免了指針操作中容易產生的錯誤
JAVA工具 (
) JDK
) Java編譯器
Java編譯器將Java源代碼文件編譯成可執行的Java字節碼
Java源代碼文件的擴展名為
java
Java編譯器把這種擴展名的文件編譯成擴展名為
class的文件
源文件中的每個類在編譯後都將產生一個class文件
這意味一個Java源代碼文件可能編譯生成多個class文件
) Java解釋器
Java解釋器對編譯生成的字節碼格式的可執行程序的運行提供支持
它是運行非圖形Java程序的命令行工具
) Appletviewer
它是Java Applet的簡單測試工具
可使用它來測試Java Applet程序
而不需要WWW浏覽器的支持
(
) Visual J++
Visual J++ 集成了可視化界面設計
交互式調試
代碼編輯
聯機幫助信息和介紹如何快速掌握該開發環境的實用向導等多項功能
同時具有能充分利用Active X和COM新技術的優勢
利用Visual J++可創建交互性很強的Internet應用程序
是難得的Java 開發系統
客戶機/服務器通信的實現
(
) Application 同 Applet 的通信
兩端通過Socket機制進行連接
) 客戶端的編程流程:
i
打開Socket
新建一個套接字
ii
為套接字建立一個輸入和輸出流
iii
根據服務器協議從套接字讀入或向套接字寫入
iiii
清除套接字和輸入/輸出流
)服務器端的編程流程:
打開Server Socket
創建一個服務器型套接字和一個普通套接字
服務器型套接字在指定端口為客戶端請求的Socket 服務
i
使用ServerSocket類的accept()方法使服務器型套接字處於監聽狀態並把監聽結果返回給普通套接字
ii
為該普通套接字創建輸入和輸出流
iii
從輸入和輸出流中讀入或寫入字節流
進行相應的處理
並將結果返回給客戶端
iiii
在客戶端和服務器工作結束後關閉所有的對象
如服務器型的套接字
普通套接字
輸入和輸出流
正是由於Java系統具有基於Socket的靈活通信機制
因而其應用程序能自由地打開和訪問網絡上的對象
就象在本地文件系統中一樣
(
) Applet之間的通信
Applet之間的通信使用Applet Context類的getApplet()方法
只要在程序中加入
Applet oneapplet=getAppletContext()
getApplet(
first
);便可使用name為first的Applet中的方法了
在該課題中大量使用了該種通信方法
因為專門同服務器端通信的 Applet中包含接收信息方法和發送信息方法
所有客戶端的Applet都要使用負責通信的Applet中的方法
所以客戶端的Applet同負責通信的Applet必須進行通信
程序 //服務器端程序S
java 負責與客戶端通信
import java
io
*;
import
*;
import java
lang
*;
import T
;
class ThreadEchoHandler extends Thread //創建線程
{
T
theT
=new T
();
Socket incoming;
int counter;
ThreadEchoHandler(Socket i
int c)
{
incoming=i;
counter=c;
}
public void run()
{
try
{
DataInputStream in=new DataInputStream(incoming
getInputStream
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26680.html