Udp實現通訊DEMO

 

Udp實現通訊DEMO

分類: java2011-09-30 10:26 801人閱讀 評論(0) 收藏 舉報java

stringexceptiontcpbyteimportclass網絡

TCP(Transmission Control Protocol,傳輸控制協議)是基於鏈接的協議,也就是說,在正式收發數據前,必須和對方創建可靠的鏈接。一個TCP鏈接必需要通過三次「對話」才能創建起來,其中的過程很是複雜,咱們這裏只作簡單、形象的介紹,你只要作到可以理解這個過程便可。咱們來看看這三次對話的簡單過程:主機A向主機B發出鏈接請求數據包:「我想給你發數據,能夠嗎?」,這是第一次對話;主機B向主機A發送贊成鏈接和要求同步(同步就是兩臺主機一個在發送,一個在接收,協調工做)的數據包:「能夠,你何時發?」,這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:「我如今就發,你接着吧!」,這是第三次對話。三次「對話」的目的是使數據包的發送和接收同步,通過三次「對話」以後,主機A才向主機B正式發送數據。 




UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去! 
UDP適用於一次只傳送少許數據、對可靠性要求不高的應用環境。好比,咱們常常使用「ping」命令來測試兩臺主機之間TCP/IP通訊是否正常,其實「ping」命令的原理就是向對方主機發送UDP數據包,而後對方主機確認收到數據包,若是數據包是否到達的消息及時反饋回來,那麼網絡就是通的。例如,在默認狀態下,一次「ping」操做發送4個數據包(如圖2所示)。你們能夠看到,發送的數據包數量是4包,收到的也是4包(由於對方主機收到後會發回一個確認收到的數據包)。這充分說明了UDP協議是面向非鏈接的協議,沒有創建鏈接的過程。正由於UDP協議沒有鏈接的過程,因此它的通訊效果高;但也正由於如此,它的可靠性不如TCP協議高。QQ就使用UDP發消息,所以有時會出現收不到消息的狀況。 


tcp協議和udp協議的差異 
TCP UDP 
是否鏈接 面向鏈接 面向非鏈接 
傳輸可靠性 可靠 不可靠 
應用場合 傳輸大量數據 少許數據 
速度 慢 快
app


UdpTest1.javatcp

[java] view plaincopyprint?測試

  1. package com.wansha.net2;  spa

  2.   

  3. import java.net.DatagramPacket;  .net

  4. import java.net.DatagramSocket;  blog

  5. import java.net.InetAddress;  ip

  6.   

  7. public class UdpTest1 {  get

  8.     public static void main(String[] args) throws Exception {  

  9.         DatagramSocket dataSocket = new DatagramSocket();  

  10.         String str = "hello";  

  11.         DatagramPacket datapacket = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),7000);  

  12.         dataSocket.send(datapacket);  

  13.           

  14.         byte[] by = new byte[4096];  

  15.         DatagramPacket dataPacket2 = new DatagramPacket(by,4096);  

  16.         dataSocket.receive(dataPacket2);  

  17.         String str2 = new String(by,0,dataPacket2.getLength());  

  18.         System.out.println(str2);  

  19.         dataSocket.close();  

  20.     }  

  21. }  


UdpTest2.java

[java] view plaincopyprint?

  1. package com.wansha.net2;  

  2.   

  3. import java.net.DatagramPacket;  

  4. import java.net.DatagramSocket;  

  5.   

  6. public class UdpTest2 {  

  7.     public static void main(String[] args) throws Exception {  

  8.         DatagramSocket ds = new DatagramSocket(7000);  

  9.         byte[] by = new byte[4096];  

  10.         DatagramPacket dp = new DatagramPacket(by,4096);  

  11.         ds.receive(dp);  

  12.           

  13.         String str = new String(by,0,dp.getLength());  

  14.         System.out.println(str);  

  15.           

  16.         String str2 = "welcome";   

  17.         DatagramPacket dp2 = new DatagramPacket(str2.getBytes(),str2.length(),dp.getAddress(),dp.getPort());  

  18.         ds.send(dp2);  

  19.         ds.close();  

  20.     }  

  21. }  

相關文章
相關標籤/搜索