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