湯小波
【摘要】本文講述了網絡通信的基本原理及java平臺下網絡通信技術,并用簡單明了的步驟闡述了java語言實現過程,旨在指導java平臺的網絡開發(fā)應用。
【關鍵字】通信 ServerSocket Socket
如今,計算機網絡已成為現代社會信息交流的重要鏈路,社會的交流離不開計算機網絡通信,如何實現其相互通信呢?基于Java的網絡通信就成為一種重要手段。
1、網絡通信協議及原理
1.1、網絡通信協議
什么是網絡通信協議?實現計算機連接和通信的規(guī)則稱之為網絡通信協議。網絡通信協議有很多種,目前應用最廣泛的有TCP/IP協議和UDP協議。在TCP/IP結構中,傳輸層有兩個重要的高級協議,分別是UDP和TCP,其中UDP稱為用戶數據報協議,TCP稱為傳輸控制協議。
1.2、TCP通信原理
TCP協議是面向連接的通信協議,即在傳輸數據前先在發(fā)送端和接收端建立邏輯連接,然后再傳輸數據,它提供了兩臺計算機之間可靠無差錯的數據傳輸。在TCP連接中必須要明確客戶端與服務器端,由客戶端向服務器端發(fā)出連接請求,每次連接的創(chuàng)建都需要經過“三次握手”。第一次握手,客戶端向服務器端發(fā)出連接請求,等待服務器確認;第二次握手,服務器端向客戶端回送一個響應,通知客戶端收到了連接請求;第三次握手,客戶端再次向服務器端發(fā)送確認信息,確認連接。TCP連接的整個交互過程如圖1所示。
1.3、IP地址與端口號
要想使網絡中的計算機能夠進行通信,必須為每臺計算機指定一個標識號,通過這個標識號來指定接收數據的計算機或者發(fā)送數據的計算機。在TCP/IP協議中,這個標識號就是IP地址廠白可以唯一標識一臺計算機。
通過IP地址可以連接到指定計算機,但如果想訪問目標計算機中的某個應用程序,還需要指定端口號。在計算機中,不同的應用程序是通過端口號區(qū)分的。接下來通過一個圖例來描述IP地址和端口號的作用,如圖2所示:
2、TCP協議下的Java通信工具類及實現原理
在JavaJDK網絡通信包中提供了兩個實現TCP程序的類,一個是ServerSocket類,用于表示服務器端;一個是Socket類,用于表示客戶端。在通信工具類ServerSocket中提供了多個構造方法,其中的常用構造方法為ServerSocket(int pat),使用該構造方法在創(chuàng)建ServerSocket對象時,可以將其綁定到一個指定的端口號上(參數port就是端口號)。Socket類提供了一個常用構造器Socket(Stringhost,int port),使用該構造方法在創(chuàng)建Socket對象時,會根據參數去連接在指定地址和端口上運行的服務器程序,其中參數host接收的是一個字符串類型的IP地址。此兩通信工具類在計算機網絡通信中的原理如圖3所示:
在服務器端和客戶端建立連接之后,要想實現相互通信,首先由ServerSocket對象監(jiān)聽某臺客戶端的端口號,由該對象的accept()方法接收客戶端的請求,當執(zhí)行了accept()方法之后,服務器端程序會發(fā)生阻塞,直到客戶端發(fā)出連接請求時,accept()方法才會返回一個Socket對象用于和客戶端實現通信,程序才能繼續(xù)向下執(zhí)行。兩端相互通信,通過數據流來實現,它們分別擁有各自的輸入流Inputstream和輸出流OutStream,通過對象的getinputStream()方法和getOutputStream()來得到相互的輸入與輸出流,通過流的方法來實現流數據的發(fā)送和接收。如圖4所示:
3、Java語言實現
3.1、針對如圖4的服務器端,實現過程如下:
1)創(chuàng)建SenrerSocket對象:
ServerSocket serverSocket=new ServerSacket(8888);
2)調用ServerSocket的accept()方法接收數據
Socket client=server Socket.accept();
3)獲取客戶端的輸出流
OutputStream os=client.getOutputStream();
4)當客戶端連接到服務端時,向客戶端輸出數據
os.write《“XXX歡迎你!").getBytes());
3.2、針對如圖4的客戶端,實現過程如下:
1)創(chuàng)建一個Socket并連接到給出地址和端口號的計算機
Socket client=new Socket(InetAddress.getLocaiHost(),8888);
2)得到接收數據的流
InputStream is=client.getlnputStream();
bytes buff=new byte[1024];//定義1024個字節(jié)數組的緩沖區(qū)
3)將數據讀到緩沖區(qū)中
int len=is.read(buf);
4、結語
通過上述分析,我們研究了網絡通信原理及在Java中如何實現網絡通信的基本技術。在此基礎之上就可以編寫出我們所需要的各種網絡通信程序。