基于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协议是面向数据包的通信,只负责发送到位,如果接收方端口没有开启则无法接收数据,所以运行顺序是先开启接收方后开启发送方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值