1. 程式人生 > >Java中的UDP應用

Java中的UDP應用

地址 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應用