Java中的UDP應用


我在《JavaSE項目之聊天室swing版》中通過遵守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中的代碼如下:

package com.itszt.test;

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();
        //數據報包,UDPB的端口為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中的代碼如下:

package com.itszt.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
 * UDPB接收來自UDPA的信息
 */
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的信息如下:

我是A,給B發信息  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM