Java學習—網絡編程 – JAVA編程語言程序開發技術文章

1,網絡模型OSI的網絡模型分為七層:應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層。
  Linux內核采用的網絡模型:應用層,傳輸層,網際層,網絡接口層。
  2,兩臺計算機的通信機制。
  兩***立的計算機,進行通信是需要借助於網絡設備的同時,計算機內部是怎麼處理的呢?感覺我自己的認識概述如下。一臺計算機想要通信首先要找到目標機,隻要找到對象才有可能實現通信,這就引出瞭IP的概念,通信的計算機之間是通過IP地址來查找相應的目標計算機的。IP地址分為兩種:IPV4和IPV6.IPV4是有四個字符數據組成,IPV6是有六個字符數據組成。每個字符數據的最大值是255.兩臺計算機通過網線連接一起後,在遵守TCP/IP協議的前提下,通過IP地址進行通信。每臺計算機又有很多的應用程序,如果一臺計算機發送數據到另一個計算機上,具體是哪一個應用程序接收呢?這個就需要有端口來區別。計算機一共分配瞭0——65535個數據用來表示端口。每一個應用程序都有一個自己的端口,也就是一個整數,通過這個端口來決定傳輸數據的時候具體發送到那一個應用程序上。所以說,計算機想要通信,首先要符合一定的協議,然後有一個IP地址,通過端口號來區分具體的應用程序來處理數據。計算機傳輸數據時,遵守的協議有很多,常用的有兩種:TCP和UDP. TCP協議特點:<1>.在傳輸數據前需要建立連接,通過三次握手完成,tcp通信是面向連接的。
  <2>.數據在傳輸過程中不需要大包操作,可以傳輸大量的數據。
  <3>.由於是在建立連接的基礎上進行數據的傳輸,該協議比較可靠。
  <4>.想傳數據,必須建立連接,在速度和效率上稍低。
  UDP協議的特點:<1>.UDP是面向無連接的,雙方進行通信不需要建立連接。
  <2>.數據在傳輸過程中要進行打包操作,每個包的最大為64K字節。
  <3>.面向無連接的傳輸,該協議不可靠。
  <4>.不需要建立連接,傳輸速度快,效率高。
  3,Java中網絡編程類java中用來網絡編程的包是:java.net;UDP協議通信使用的是java包中的DatagramSocket和DatagramPacket對象。建立通信機制的步驟是:<1>.通過DatagramSocket對象是為網絡通信構建一個通道,專業的叫法就是創建端口。
  發送端具體實現代碼:DatagramSocket ds = new DatagramSocket();如果是發送端的話,這個端口可以不進行綁定,使用內核自由分配的端口號即可。如果是接受端的話,這個端口要必須要綁定到特定的端口,這個端口也可以叫做監視器。監視某個端口信息的變化。接收端具體實現代碼:DatagramSocket ds = new DatagramSocket(端口號); 參看GDK手冊有詳細說明。
  <2>.封包操作。
  如果是發送端的話,首先要有數據,由於網絡傳輸的都是二進制數據,所以在定義網絡包的時候也要定義成二進制形式的。具體定義代碼如下:發送數據包數據:byte[] buf = "數據".getBytes();接受數據包數據:byte[] buf = new byte[1024];有瞭數據和數據緩沖區後,可以把這個數據和數據緩沖區封裝成網絡包:發送端的數據包:DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getAddress("192.168.1.104"),10000);接受端的數據包:DatagramPacket dp = new DatagramPacket(buf,buf.length);<3>.發送接受操作。
  根據端口Socket的方法,對數據包發送和接受操作。具體實現代碼:發送端:ds.send(dp);接收端:ds.receive(dp); 接收到的數據包放到接收端定義的數據包緩沖區中。
  <4>.關閉資源。
  ds.close();TCP協議通信使用的是java包中的Socket和ServerSocket對象。TCP和UDP的區別在於,TCP是建立連接,UDP是不需要連接,TCP操作的是端口輸入輸出流對象,UDP操作的是DatagramPacket包。按照TCP通信時不需要建立包,直接獲取輸入輸出流操作即可。通信機制的步驟如下:<1>.TCP通信首先也是要建立Socket端口。UDP中客戶端和服務端都是使用的DatagramSocket創建對象的方法,創建通信端口。TCP建立端口時,客戶端和服務端是使用不一樣的類。具體操作代碼如下:客戶端:Socket s = new Socket();服務端:ServerSocket ss = new ServerSocket(監聽端口);<2>.建立連接操作。
  通過服務端ServerSocket對象的accept方法獲得端口連接,在獲得請求端口信息後,建立連接。
  <3>.獲得輸入輸出流操作。
  在客戶端獲得Socket的getOutputStream()方法,通過該方法,輸出數據。在服務端通過獲得Socket的getInputStream()方法,讀取數據。
  <4>.關閉流操作。
  客戶端:s.close();服務端:s.close; ss.close();4,網絡編程的實例附錄:UdpTrans.java  <使用UDP協議進行簡單的通信實驗> TcpDemo.java   <使用TCP協議進行簡單的通信實驗> UdpdownText.java <使用UDP協議上傳文本文件> UdpdownPic.java  <使用UDP協議上傳圖片>

作者 sdtarena

發佈留言