基于UDP协议的简单通信

TCP/IP协议和UDP协议的区别

TCP/IP协议是一种面向流的全双工通信协议,有着服务器客户端的概念,必须保证通信双方建立稳定安全的连接才能
够进行数据传输;UDP协议不是一种基于稳定连接的协议,是一种面向数据报包的通信协议,不需要通信双方建立稳的
连接, 所以UDP不需要获取输入输出流,且不用建立连接,可以直接指定主机地址和端口然后发送

发送端

public class Sender {

    public static void main(String[] args) throws IOException {
        //创建一个数据报的网络通道(创建物流公司)
        DatagramSocket ds = new DatagramSocket();

        //准备需要传输的数据(货物)
        String msg = "发送端的信息";
        //将需要发送的数据打包成数据报包(打包货物)
        DatagramPacket packet = new DatagramPacket(
            msg.getBytes(), 		//需要被发送的数据的字节数组
            msg.getBytes().length, 	//发送的数据长度(字节数组长度)
            InetAddress.getByName("localhost"),  //接收方的ip
            1025	//接收方的端口				
        );
        //发送数据报包(投递包裹)
        ds.send(packet);
        //关闭通道
        ds.close();
    }
}

我们发送数据需要创建一个DatagramSoket,然后再创建一个DatagramPacket(包裹), 将内容放入包裹中,使用DatagramSoket中的send(包裹)这个方法就能发送数据了

接收方

public class Receiver {

    public static void main(String[] args) throws IOException {
        //创建一个数据报的网络通道,绑定到指定端口
        DatagramSocket ds = new DatagramSocket(1025);

        //声明字节数组,用于存储接收的数据
        byte[] b = new byte[1024];
        //准备数据报包(空包)
        DatagramPacket packet = new DatagramPacket(b, b.length);


       //接收数据到数据报包中
       ds.receive(packet);
       //接受到的数据(字节数组)实际长度
       int len = packet.getLength();
       //将字节数组转换为字符串
       String s = new String(b, 0, len);
       //获取发送方的ip地址
       String ip = packet.getAddress().getHostAddress();
       System.out.println("收到来自【"+ip+"】消息:"+s);
    }
}

对于接收方我们接收数据也需要创建一个DatagramSoket只不过需要指定一个端口, 使端口开放才能接收数据,然后也需要创建DatagramPacket只不过空包里面只用放一个空的字节数组,收数据时需要使用DatagramSocket中的receive()方法,在这之后, 空的字节数组就有内容了

注意: 启动顺序是先开启接收方再开启发送方,因为UDP协议是面向数据包的通信,只负责发送到位,如果接收方端口没有开启则无法接收数据,所以运行顺序是先开启接收方后开启发送方

你可能感兴趣的:(基于UDP协议的简单通信)