Java中的UDP應用
阿新 • • 發佈:2017-12-29
地址 con 設置 安全 實現 端口 body proto ddr
我在《JavaSE項目之聊天室》中通過遵守TCP協議的ServerSocket與Socket實現了聊天室的群聊窗口。同時,在介紹OSI與TCP/IP參考模型時,也曾提及TCP與UDP(全稱User Datagram Protocol,用戶數據報協議)。
總的來說,TCP與UDP的區別有:
1.TCP與UDP的基本區別:
(1)TCP基於連接,UDP基於無連接;
(2)TCP要求系統資源較多,UDP則較少;
(3)UDP程序結構較簡單;
(4)流模式(TCP)與數據報模式(UDP);
(5)TCP保證數據正確性,UDP可能丟包;
(6)TCP保證數據順序,UDP不保證。
2.UDP應用場景主要有:
(1)面向數據報方式;
(2)網絡數據大多為短消息;
(3)擁有大量Client;
(4)對數據安全性無特殊要求;
(5)網絡負擔非常重,但對響應速度要求高。
3.具體編程時的區別:
(1)套接字Socket的參數不同;
(2)UDP不需要調用listen和accept;
(3)UDP收發數據分別用send()和receive()方法;
(4)TCP:地址信息在connect和accept時確定;
(5)UDP:在send()和receive()方法中每次均需指定地址信息。
我接下來通過代碼演示UDP協議。我寫了兩個類,分別是UDPA和UDPB,通過UDPA給UDPB發送信息。
UDPA.java中的代碼如下:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * UDPA要給UDPB發信息 */ public class UDPA { public static void main(String[] args) throws IOException { byte[] bs="我是A,給B發信息".getBytes();//要發的信息內容 //UDPA與UDPB的ip均為本機ip,故設置不同的端口號InetAddress desIp = InetAddress.getLocalHost(); //數據報包,UDPA的端口為10010 DatagramPacket p=new DatagramPacket(bs, bs.length, desIp, 10010); //創建數據報套接字,UDPA的端口設置為10086 DatagramSocket socket_A=new DatagramSocket(10086); //UDPA給UDPB發送數據報 socket_A.send(p); //關閉socket_A套接字 socket_A.close(); } }
UDPB.java中的代碼如下:
import java.io.IOException;import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPB { public static void main(String[] args) throws IOException { //用數組接收數據報包 byte[] bs=new byte[500]; DatagramPacket p=new DatagramPacket(bs, bs.length); //創建數據報套接字 DatagramSocket socket_B=new DatagramSocket(10010); //接收數據報包 socket_B.receive(p); System.out.println(new String(bs, 0, p.getLength())); //關閉套接字 socket_B.close(); } }
在程序運行時,先運行UDPB,等著接收UDPA發來的信息,然後再運行UDPA,則UDPB接收到UDPA的信息。
Java中的UDP應用