程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 使用Java實現數據報通訊過程

使用Java實現數據報通訊過程

編輯:JAVA編程入門知識
  
  數據報(Datagram)使網絡層數據單元在介質上傳輸信息的一種邏輯分組格式,它是一種在網絡中傳播的、獨立的、自身包含地址信息的消息,它能否到達目的地,到達的時間,到達時內容是否會變化不能准確知道的。 <!-- frame contents --> <!-- /frame contents --> 它的通訊雙方是不需要建立連接的,對於一些不需要很高質量的應用程序來說,數據報通訊是一個非常好的選擇。在Java的java.net包中有兩個類DatagramSocket和DatagramPacket,為應用程序中采用數據報通訊方式進行網絡通訊。
  
  下面,我想具體解釋在Java中實現客戶端與服務器之間數據報通訊的方法,請看:
  
  一、客戶端應用程序的工作流程
  
  1) 首先要建立數據報通訊的Socket,我們可以通過創建一個DatagramSocket對象來實現它,在Java中DatagramSocket類有如下兩種構造方法:
  
  a)public DatagramSocket() 構造一個數據報socket,並使其與本地主機任一可用的端口連接。若打不開socket則拋出SocketException異常。
  
  b) public DatagramSocket(int port) 構造一個數據報socket,並使其與本地主機指定的端口連接。若打不開socket或socket無法與指定的端口連接則拋出SocketException異常。
  
  2) 創建一個數據報文包,用來實現無連接的包傳送服務。每個數據報文包是用DatagramPacket類來創建,DatagramPacket對象封裝了數據報包數據,包長度,目標地址,目標端口。作為客戶端要發送數據報文包,要調用DatagramPacket類以如下形式的構造函數創建DatagramPacket對象,將要發送的數據和包文目的地址信息放入對象之中。
  
  DatagramPacket(byte bufferedarray[],int length,InetAddress address,int port)即構造一個包長度為length的包傳送到指定主機指定端口號上的數據報文包,參數length必須小於等於bufferedarry.length
  
  DatagramPacket類提供了四個類來獲取信息
  
  a) public byte[] getData() 返回一個字節數組,包含收到或要發送的數據報中的數據
  
  b) public int getLength() 返回發送或接收到的數據的長度
  
  c) public InetAddress getAddress() 返回一個發送或接收此數據報包文的機器的IP地址
  
  d) public int getPort() 返回發送或接收數據報的遠程主機的端口號。
  
  3)創建完DatagramSocket和DatagramPacket對象,就可以發送數據報文包了。發送是通過調用DatagramSocket對象的send方法實現,它需要以DatagramPacket對象為參數,將剛才封裝進DatagramPacket對象中的數據組成數據報發出。
  
  4)當然,我們也可以接收數據報文包,為了接收從服務器返回的結果數據報文包,我們需要創建一個新的DatagramPacket對象,這就需要用到DatagramPacket的另一種構造方式DatagramPacket(byte bufferedarray[],int length),即只需指明存放接收的數據報的緩沖區和長度。調用DatagramSocket對象的receive()方法來完成接收數據報的工作,此時需要將上面創建的DatagramPacket對象作為參數,該方法會一直阻塞知道收到一個數據報文包,此時DatagramPacket的緩沖區中包含的就是接收到的數據,數據報文包中也包含發送者的IP地址,發送者機器上的端口號等信息。
  
  5)處理接收緩沖區內的數據,獲取服務結果。
  
  6)當通訊完成後,可以使用DatagramSocket對象的close()方法來關閉數據報通訊Socket。當然,Java自己會自動關閉Socket,釋放DatagramSocket和DatagramPacket所占用的資源。但是作為一種良好的編程習慣,還是要顯示的予以關閉。進入討論組討論。   
  下面我給出一個簡單的利用數據報通訊的客戶端程序,它能夠完成與服務器簡單的通訊。為了直觀,我把它寫成了Applet程序,由於本文不是介紹Applet,所以我只寫了簡要的注釋,對Applet感愛好的朋友親參閱有關書籍。
  
  import java.applet.*;
   <!-- frame contents -->
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved