Java之基于UDP的Socket通信

        TCP/IP协议是一种面向流的全双工通信协议,有着服务器客户端的概念,必须保证通信双方建立稳定安全的连接才能够进行数据传输;而UDP协议不是一种基于稳定连接的协议,是一种面向数据报包的通信协议,不需要通信双方建立稳定的连接,也没有所谓服务端和客户的概念,数据报包在传输的时候不保证一定及时到达,也不能保证数据报包的到达顺序,但是UDP协议传输效率要远高于TCP/IP,比如直播,视频会议。

        DatagramSocket类是一个基于UDP通信协议的套接字,使用该类可以实现一个无连接的通信通道;需要实现在该通道通信,我们还需要另一个类的辅助:DatagramPacket(数据报包),该类用于将数据打包成数据报包,然后通过DatagramSocket完成数据报包的发送(send)与接收(receive)

 

消息发送方(Sender)

/**
 * 发送方
 * @author Jack Smith
 *
 */
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();
    }
}

 

消息接收方(Receiver)

/**
 * 接收方
 * @author Jack Smith
 *
 */
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);

        //通过循环可以不断接收发送到当前地址和端口的数据报包
        while(true) {
            //接收数据到数据报包中
            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);
        }
    }
}

注:
    导师指导下完成,如有雷同,那就是一个老师教的
    代码有许多不足,欢迎留言讨论和更正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值