JAVA实现聊天功能

用UDP如何实现类与类之间的通信?
**UDP的特征:**面向无连接, 速度比较快, 但是不安全, 有大小限制, 限制64kb
**应用场景:**视频会议, 或者不太重要的数据
发送端使用步骤:
1.创建核心对象DatagramSocket(int port)
2.打包数据DatagramPacket(byte[] 数据, int 数据的长度, InetAddress ip地址, int 发送的端口号)
3.使用DatagramSocket的功能send(DatagramPacket dp)
4.释放资源
接受端的使用步骤
1.创建核心对象DatagramSocket(int port),但是这个必须给端口, 而且端口和发送端发送的端口保持一致
2.创建DatagramPacket(byte[] 数据, int 有效长度)接受数据
3.调用DatagramSocket的receive(DatagramPacket)方法接受数据
4.解析数据byte[] arr getData();或者int getLength();
5.释放资源
代码实现

//用户1
public class UserOne {
    public static void main(String[] args) throws SocketException {
        //1.创建核心对象DatagramSocket --->如果不给端口, 程序会分配端口,随机的
        DatagramSocket ds = new DatagramSocket(8888);
        Scanner sc = new Scanner(System.in);
       //创建一条线程用来"接受'数据
        new Thread() {
            @Override
            public void run() {
                while (true) {
                    String next = sc.next();
                    try {
                        DatagramPacket dp = new DatagramPacket(next.getBytes(), next.getBytes().length,
                                InetAddress.getByName("127.0.0.1"), 7777);
                        ds.send(dp);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();

        //创建一条线程"发送"数据
        new Thread() {
            @Override
            public void run() {
                while (true) {
                    try {
                        DatagramPacket dp = new DatagramPacket(new byte[1024], 1024,
                                InetAddress.getByName("127.0.0.1"), 7777);
                        ds.receive(dp);
                        byte[] data = dp.getData();
                        int len = data.length;
                        System.out.println(new Date().toLocaleString());
                        System.out.println(new String(data, 0, len));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }
}
//用户2
public class UserTwo {
    public static void main(String[] args) throws SocketException {
        //1.创建核心对象DatagramSocket --->如果不给端口, 程序会分配端口,随机的
        DatagramSocket ds = new DatagramSocket(7777);
        Scanner sc = new Scanner(System.in);

        //创建一条线程用来"接受'数据
        new Thread(){
            @Override
            public void run() {
                while (true) {
                    String next = sc.next();
                    try {
                        DatagramPacket dp = new DatagramPacket(next.getBytes(),next.getBytes().length,
                                InetAddress.getByName("127.0.0.1"),8888);
                        ds.send(dp);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();

        //创建一条线程"发送"数据
        new Thread(){
            @Override
            public void run() {
                while (true) {
                    try {
                        DatagramPacket dp = new DatagramPacket(new byte[1024],1024,
                                InetAddress.getByName("127.0.0.1"),8888);
                        ds.receive(dp);
                        byte[] data = dp.getData();
                        int len = data.length;
                        System.out.println(new Date().toLocaleString());
                        System.out.println(new String(data, 0, len));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值