UDP通信案例:實現收發數據


UDP通信案例:實現收發數據

UDP協議的特點

  • 面向無連接的協議
  • 發送端只管發送,不確認對方是否能收到。
  • 基於數據包進行數據傳輸。
  • 發送數據的大小限制64K以內
  • 因為面向無連接,速度快,但是不可靠。

UDP協議的使用場景

  • 即時通訊

  • 在線視頻

  • 網絡語音電話

UDP協議相關的兩個類

* DatagramPacket

  • 數據包對象
  • 作用:用來封裝要發送或要接收的數據,比如:集裝箱

* DategramSocket

  • 發送對象
  • 作用:用來發送或接收數據包,比如:碼頭

DatagramPacket類構造方法

* DatagramPacket(byte[] buf, int length, InetAddress address, int port)

  • 創建發送端數據包對象

  • buf:要發送的內容,字節數組

  • length:要發送內容的長度,單位是字節

  • address:接收端的IP地址對象

  • port:接收端的端口號

    DatagramPacket(byte[] buf, int length)

  • 創建接收端的數據包對象

  • buf:用來存儲接收到內容

  • length:能夠接收內容的長度

DatagramPacket類常用方法

* int getLength() 獲得實際接收到的字節個數

DatagramSocket類構造方法

* DatagramSocket() 創建發送端的Socket對象,系統會隨機分配一個端口號。

* DatagramSocket(int port) 創建接收端的Socket對象並指定端口號

DatagramSocket類成員方法

* void send(DatagramPacket dp) 發送數據包

* void receive(DatagramPacket p) 接收數據包

發送者:

package com.liqiliang.demo02_實現收發數據;

import java.io.IOException;
import java.net.*;

//發送端
public class Sender {
    public static void main(String[] args) throws IOException {
        //1.封裝要發送的數據:DatagramPacket
        //發送的信息
        byte[] msg ="你好我叫吳宇豪,我是傻X!".getBytes();

        //發送給自己電腦
        InetAddress localHost = InetAddress.getLocalHost();
        //發送給別人電腦
        InetAddress otherHost = InetAddress.getByName("192.168.37.14");

        //端口號
        int port = 8888;
        DatagramPacket dp=
            new DatagramPacket(msg,msg.length,otherHost,8888);

        //2.創建碼頭,發送數據:DatagramSocket
        DatagramSocket ds = new DatagramSocket();
        System.out.println("准備發送數據");
        ds.send(dp);
        System.out.println("發送數據完畢");
    }
}

接收者:

package com.liqiliang.demo02_實現收發數據;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Receiver {
    public static void main(String[] args) throws IOException {
        //1.准備一個空集裝箱接收數據:DatagramPacket
        byte[] buff = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buff,buff.length);

        //2.定義碼頭,接收對方發送的數據:DatagramSocket
        DatagramSocket ds = new DatagramSocket(8888);
        System.out.println("准備好接收信息了");
        ds.receive(dp);
        System.out.println("接收信息完畢........");

        int len = dp.getLength();
        //將收到的有效數據進行打印
        System.out.println(new String(buff,0,len));


    }
}


免責聲明!

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



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