UDP协议(多人聊天)

udp:数据报文(包)协议
DatagramPacket====传输层
=UDP
DatagramSocket
传输层
有三种:
单播:是指只向一个固定的机器发送包
广播:是向255.255.255.255发送,所有监听某端口的机器都可以接收到
组播:是向一个用户组发送,该组里面所有用户可以接收到

DatagramPacket有2个作用
1.发送的包===>要给定发送的内容以及发送的地址与端口
DatagramPacket dp =
new DatagramPacket(byte[],0,length,InetAddress,port);
2.接收的包===>只要指定接收包的大小
DatagramPacket dp =
new DatagramPacket(byte[],0,length);

DatagramSocket有2个作用
1.发送的人===>只需要new出来就可以了
DatagramSocket ds = new DatagramSocket();
2.接收的人===>需要指定接收的地址以及端口
DatagramSocket ds = new DatagramSocket(port,InetAddress);

对于三种udp协议
1.发送方完全相同,单播是指定一个ip
广播是指定255.255.255.255这个ip
组播是指定D类ip(224-239)
2.接收方单播直接指定一个ip与端口
广播不能指定ip,只要端口
组播要使用MulticastSocket,
让后使用joinGroup加入该组

发送

 public static void main(String[] args) throws Exception {
        /**
         * TCP协议(有连接的协议)
         * 客户端 socket
         * 服务器 serversocket
         *
         * UDP协议(无连接的协议)
         * 单播
         * 广播
         * 组播
         */
        DatagramSocket socket =new DatagramSocket();
        System.out.println("套接字建立");
        String msg="测试";
        //单播和广播的区别就是地址不同
        DatagramPacket dp=new DatagramPacket(msg.getBytes(),msg.getBytes().length, InetAddress.getByName("255.255.255.255"),1122);
        socket.send(dp);
        socket.close();
        System.out.println("已经发送了");
    }
}

接收

 public static void main(String[] args) throws Exception {
        DatagramSocket socket=new DatagramSocket(1122);
        //数据包
        byte[]bs=new byte[100];
        DatagramPacket packet=new DatagramPacket(bs,100);
        socket.receive(packet);
        System.out.println(new String(bs).trim());


        socket.close();
    }

组播

public static void main(String[] args) throws Exception {
        DatagramSocket socket =new DatagramSocket();
        System.out.println("套接字建立");
        String msg="测试";
        //单播和广播的区别就是地址不同
        //组播
        DatagramPacket dp=new DatagramPacket(msg.getBytes(),msg.getBytes().length, InetAddress.getByName("227.0.0.0"),1122);
        socket.send(dp);
        socket.close();
        System.out.println("已经发送了");
    }
public static void main(String[] args) throws Exception {
        //需要跨机聊天要关闭防火墙
        MulticastSocket socket=new MulticastSocket(1122);
        //可以加入多个
        socket.joinGroup(InetAddress.getByName("227.0.0.0"));
//        DatagramSocket socket=new DatagramSocket(1122);
        //数据包
        byte[]bs=new byte[100];
        DatagramPacket packet=new DatagramPacket(bs,100);
        socket.receive(packet);
        System.out.println(new String(bs).trim());
        //退出
        socket.leaveGroup(InetAddress.getByName("227.0.0.0"));
        //关闭
        socket.close();
    }
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值