Java-->打包发送信息(UDP协议)

--> 好像UDP 协议没有TCP 协议应用得那么广泛

--> UdpSender 类定义一个发送端(快递公司)

package com.dragon.java.udpdatagram;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class UdpSender {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);

        // 创建一个DatagramSocket 快递公司
        DatagramSocket socket = new DatagramSocket(10000);

        // 把信息打包 new DatagramPacket(发送的字节数组, 数组中要出去多少字节, 对方的ip地址, 对方的端口号);
        // 注意:数据报的长度不能超过 64K
        byte[] data = "你好".getBytes();
        DatagramPacket dPackage = new DatagramPacket(data, data.length,
                InetAddress.getByName("192.168.10.79"), 20000); // xx.xx.xx.255-->广播ip

        String line = "";
        while ((line = scanner.nextLine()) != null) {
            data = line.getBytes();
            dPackage.setData(data);
            dPackage.setLength(data.length);

            // 发送包裹
            socket.send(dPackage);
        }
        // socket.close();
    }
}

--> UDPReceiver 类定义一个接收端(收件人)

package com.dragon.java.udpdatagram;

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

/*
 * 收件人
 */
public class UdpReceiver {
    public static void main(String[] args) throws IOException {
        // 绑定到指定的端口
        DatagramSocket socket = new DatagramSocket(20000);

        // 创建一个空包裹,用来接收发来的数据报的数据报包
        DatagramPacket p = new DatagramPacket(new byte[1024], 1024);

        while (true) {
            // 把收到的信息封装到DatagramPacket
            socket.receive(p); // 接收信息的阻塞式方法

            InetAddress address = p.getAddress(); // 发送人
            int port = p.getPort(); // 发送方的端口
            byte[] data = p.getData(); // 存储发送过来的数据的字节数组
            int length = p.getLength(); // 发送过来的信息的实际长度
            System.out.println(address + " " + port + " "
                    + new String(data, 0, length));

        }
        // socket.close();
    }
}

--> UDP 协议和TCP 协议相比好处是快速的(因为它无需花时间去保证数据是否损坏,无需花时间确定接受方是否存在并等待响应)、无连接的、不可靠的数据报传输协议。而TCP协议则相反,所以如何应用要根据实际需求。

posted on 2016-08-21 22:50  西门吃雪  阅读(3265)  评论(0编辑  收藏  举报

导航