引言:本文主要簡要介紹如何使用JAVA語言進行編程實現計算機網絡通信協議要求的各項具體功能,使用JAVA語言編程完成計算機網絡底層通信協議,是JAVA網絡編程不可或缺的組成部分。
Java語言具有平臺無關特性、安全機制、高可靠性和內嵌的網絡支持,使之成為當前編寫網路應用程序的首選工具之一。網絡應用的核心思想是聯入網絡的不同計算機能夠跨越空間協同工作,這首先要求它們之間能夠準確、迅速的傳遞信息,在Java中這些信息是以數據流的方式傳送的。網絡通信協議種類繁多,我這里主要討論TCP/IP協議的,Java編程實現。
一、使用連接的流式socket (套接字)
套接字(Socket)作為編程接口,應用于TCP/IP的協議傳輸層,利用JAVA語言中Socket提供的一組應用程序編程接口(API)就可以編程實現TCP/IP協議的傳輸層連接。
(一)InetAddress類
InetAddress類是Java語言網絡編程中比較常用的類,它能夠區分計算機網絡中的不同節點,所有InetAddress對象都包含網絡IP地址、計算機主機名稱等信息,通過該對象獲取相關信息。語句如下:
InetAddress ipa= InetAddress.getByName(args[0]); //利用主機名創建對象
System.out.println(“Host name:”+ipa.getHostName()); //獲取主機名
System.out.println(“Host IP Address:”+ipa.toString()); //獲取IP地址
(二)流式套接字的通信原理
流式套接字實現的通信是基于連接的通信,分三步完成:
1.通信開始前,確認通信雙方身份并創建專用的虛擬連接通道;2.傳輸數據;3.通信結束刪除連接。如圖所示:
這種通信由于始終保持連接,從而保證了通信的實時性和準確性,然而建立連接和刪除連接的過程使程序的復雜度有了一定的提高,由于實時要求性高連接始終被保持,這樣使系統的內存等資源存在一定的浪費,所以只適用于不間斷的通信,如實時通信軟件,而對于一些間斷的服務的或實時性要求較低的通信,則可以使用無連接的數據報方式。
(三)實現流式Socket通信的Client端編程
public class MySockerServer
{
public static void main(String[] args)
{
ServerService MySe=new ServerService(8000,10); //創建服務對象,進行監聽服務
}
}
class ServiceThreak extends Frame implements Runnable
{//當客戶端請求生成,服務器建立Frame用于數據交互
ServerService Listener; //創建通信線程的listener對象
Socket Client; //創建Socket對象,負責本線程的C/S通信
Threak Threak; //創建線程用于通信
Panel Listener; //創建窗口,用于顯示通信中服務端的相關數據
TextArea SeMeg; //創建文本區,顯示相關數據
public ServiceThreak(ServerService v,Socket s) //構造函數
{
}
public void runner() //子線程任務,完成與客戶端的傳輸
{
try{
DataInputStream indata=new DataInputStream( //取得從客戶端輸入的數據流
new BufferedInputStream(ConnectedClient.getInputStream()));
PrintStream outdata=new PrintStream(//輸出對象,完成數據流輸出到客戶端操作
new BufferedOutputStream(ConnectedClient.getOutStream()));
output.flush(); //輸出信息到客戶端
String str=input.readLine(); // 字符串存儲客戶端輸入信息
while (!str.equals(“BYE!”))
{
str=input.readLine(); //字符串str中存儲客戶端輸入的下一行數據
}
connectdeClient.close(); //當從客戶端輸入“BYE!”結束循環,即通信結束
catch(Exception e){}
Listener.addMeg(“客戶端關閉”+”\n”);
Dispose(); //斷開通信
}
}
二、無連接的數據報(UDP)
流式套接字(Socket)用于完成不間斷的連接,可靠性和準確性高,同樣存在資源浪費問題,如網絡資源和計算機系統資源,所以在對時間和準確性要求較低的應用中,如收發電子郵件,可采用無連接的數據報方式(UDP)。
UDP是與Socket相反的連接,它的協議是不需要連接的,通過UDP直接發送數據包,UDP只適用于數據量較少的傳輸需求、并且對時間和可靠性要求較低的應用。由于UDP協議沒不存在的過程,使他的傳輸效率較高;也正因為這個原因,它的可靠性不如流式套接字(Socket)高。騰訊QQ就是使用UDP收發信息典型案例,所以用戶就會遇到信息丟失的情況。
參考文獻
[1]朱喜福,徐劍魁.Java程序設計[M].清華大學出版社,2010.
[2]辛運幃,饒一梅.Java語言程序設計[M].人民郵電出版社,2009.
[3]劉永華.Java網絡編程技術[M].清華大學出版社,2008.
(作者單位:天津交通職業學院)