UDP传输

Posted 码上加油站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UDP传输相关的知识,希望对你有一定的参考价值。

  • 1.发送Send
    • 创建DatagramSocket, 随机端口号
    • 创建DatagramPacket, 指定数据, 长度, 地址, 端口
    • 使用DatagramSocket发送DatagramPacket
    • 关闭DatagramSocket
  • 2.接收Receive
    • 创建DatagramSocket, 指定端口号
    • 创建DatagramPacket, 指定数组, 长度
    • 使用DatagramSocket接收DatagramPacket
    • 关闭DatagramSocket
    • 从DatagramPacket中获取数据
  • 3.接收方获取ip和端口号
    • String ip = packet.getAddress().getHostAddress();
    • int port = packet.getPort();

 


UDP传输优化

  • 接收端Receive
  • DatagramSocket socket = new DatagramSocket(6666);                       //创建socket相当于创建码头
    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);       //创建packet相当于创建集装箱
    
    while(true) {
        socket.receive(packet);                                             //接收货物
         byte[] arr = packet.getData();
        int len = packet.getLength();
        String ip = packet.getAddress().getHostAddress();
        System.out.println(ip + ":" + new String(arr,0,len));
    }
    

     

     
  • 发送端Send

    DatagramSocket socket = new DatagramSocket();       //创建socket相当于创建码头
    Scanner sc = new Scanner(System.in);
    
    while(true) {
        String str = sc.nextLine();
        if("quit".equals(str))
            break;
        DatagramPacket packet =                             //创建packet相当于创建集装箱
                new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
        socket.send(packet);            //发货
    }
    socket.close();
    

     

     

 


 

UDP传输多线程

发送和接收在一个窗口完成

public class Demo_MoreThread {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new Receive().start();

        new Send().start();
    }

}

class Receive extends Thread {
    public void run() {
        try {
            DatagramSocket socket = new DatagramSocket(6666);                   //创建socket相当于创建码头
            DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);   //创建packet相当于创建集装箱

            while(true) {
                socket.receive(packet);                                             //接收货物
                byte[] arr = packet.getData();
                int len = packet.getLength();
                String ip = packet.getAddress().getHostAddress();
                System.out.println(ip + ":" + new String(arr,0,len));
            }
        } catch (IOException e) {

            e.printStackTrace();
        }
    }
}

class Send extends Thread {
    public void run() {
        try {
            DatagramSocket socket = new DatagramSocket();       //创建socket相当于创建码头
            Scanner sc = new Scanner(System.in);

            while(true) {
                String str = sc.nextLine();
                if("quit".equals(str))
                    break;
                DatagramPacket packet =                             //创建packet相当于创建集装箱
                        new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
                socket.send(packet);            //发货
            }
            socket.close();
        }  catch (IOException e) {

            e.printStackTrace();
        }
    }
}

 

 

以上是关于UDP传输的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 网络编程流相关代码(UDP和TCP)

如何通过udp获取直播源代码

udp socket编程文件传输

OSI七层模型与TCP/UDP初识(代码待补充,7.31补充)

FreeRTOS + LWIP -UDP数据传输

UDP如何实现可靠传输