当前位置: 首页 > article >正文

Java通信协议——UDP通信协议,模拟聊天室(完整详解,附有代码)

UDP通信协议,模拟聊天室

需求说明
实现客户咨询问题,客服人员答复问题
分析
咨询时,客户是发送方,客服人员是接收方
答复时,客服人员是发送方,客户是接收方,实现思路和咨询时相同

当客户端输入 ending 时 会话结束。
运行时,先运行接收端,再运行发送端。
效果图:
在这里插入图片描述
在这里插入图片描述

接收端:

public class ReceiveMessTest {
    public static void main(String[] args) throws IOException {
// UDP多次接收 多次发送
// 接收端模拟TCP协议的服务器端
        System.out.println("---服务端---");

        // 1.创建接收端的DatagramSocket对象,
        DatagramSocket ds = null;
        DatagramPacket dp = null;

        Scanner sc  = new Scanner(System.in);
        // 1.创建接收端的DatagramSocket对象,
        ds = new DatagramSocket(10011);
        //循环实现多次接收
        while (true){

            // 2.创建接收数据的数据包
            // 重新打包数据
            byte[] bytes = new byte[1024];
           dp = new DatagramPacket(bytes,bytes.length);

            // 3.接收数据
            ds.receive(dp);

            // 4.解析数据包
            byte[] data = dp.getData();

            // 打印数据
            String msg = new String(data);
            System.out.println("客户端:"+msg);

// -----------------------------------------------------

            // 发送
            System.out.print("服务端请输入:");
            String s = sc.nextLine();
            // 获得上个数据包发送的地址
            // InetAddress address = dp.getAddress();
            SocketAddress address = dp.getSocketAddress();
            // 打包数据
            dp = new DatagramPacket(
                    s.getBytes(),
                    s.getBytes().length,
                    address
            );
            // 发送数据
            ds.send(dp);


        }



    }
}

发送端:

public class SendMessTest {
    public static void main(String[] args) throws IOException {

// UDP多次发送 多次接收
//发送端模拟TCP协议的客户端
        System.out.println("----客户端----");

        // 1.创建发端的对象
        DatagramSocket ds = null;
        DatagramPacket dp = null;

        // 2.打包数据
        // 2.1数据来自键盘录入
        Scanner sc = new Scanner(System.in);
        while (true){
            // 1.创建发端的对象
            ds = new DatagramSocket();

            System.out.print("请输入要发送的数据:");
            String s = sc.nextLine();
            // 结束发送的条件
            if ("ending".equals(s)){
                break;
            }
            // 2.2将发送的内容变成字节数组
            byte[] bytes = s.getBytes();
            // 2.3向127.0.0.1的设备发送
            InetAddress address = InetAddress.getByName("127.0.0.1");
            // 2.4接收设备的端口号
            int port = 10011;
            // 2.5 打包数据
            dp = new DatagramPacket(bytes,bytes.length,address,port);

            // 3.发送数据
            ds.send(dp);

// ----------------------------------------


            // 4.接收数据
            // 创建一个新的数组,用来接收数据
            byte[] bytes1 = new byte[1024];
            // 创建数据包
            dp = new DatagramPacket(bytes1,bytes1.length);
            // 接收数据
            ds.receive(dp);
            // 解析数据
            byte[] data = dp.getData();
            String s1 = new String(data);
            System.out.println("服务端:"+s1);


        }

        // 4.释放资源
        ds.close();




    }
}


http://www.kler.cn/news/310732.html

相关文章:

  • android含有EditText的键盘弹出后界面的正确处理
  • 人工智能 | 基于ChatGPT开发人工智能服务平台
  • 单片机嵌入式编程中常用技术点
  • Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook
  • Java在零工市场中的应用:构建灵活高效的劳动力平台
  • 【算法】局部敏感哈希(LSH):高效解决相似性搜索问题的利器
  • html页面整合vue2或vue3
  • 选择适合你企业发展的服务器
  • 【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
  • C++类和对象(4)
  • Linux平台UOS系统摄像头播放
  • 爬虫--翻页tips
  • .Net Gacutil工具(全局程序集缓存工具)使用教程
  • qt-creator-10.0.2之后版本的jom.exe构建和编译速度慢下来了
  • 【Python日志功能】二.高级配置与日志处理器
  • 怎么浏览URL的PDF文件呢
  • 性能测试笔记
  • 【Linux】网络层协议——IP
  • 跨界融合,GIS如何赋能游戏商业——以《黑神话:悟空》为例
  • flutter hive的使用
  • 万兆时代 TCP/IP如何赋能以太网飞跃
  • CentOS 中使用 OpenSSL 查看 SSL 证书详细信息
  • 利用模糊综合评价法进行数值评分计算——算法过程
  • JS 性能优化
  • Linux Kernel Makefiles 编译标志详解
  • C++在Linux实现多线程和多进程的TCP服务器和客户端通信
  • 【公告】博客正在迁移至 git pages
  • RaisePropertyChanged(() => DateName)详解记录一下
  • 前端开发之迭代器模式
  • linux 解压缩