从群聊到私聊:一个Java聊天室的推进
通信协议对比1.0客户端直接发送“你好”服务端转发xx“你好”2.0群聊客户端发送内容“你好”协议格式2#你好私聊客户端发送内容“小蒲 你好”协议格式1#小蒲#你好通信协议设计客户端——服务端协议发送public void send(String message) { //消息类型 好友名称长度 好友名称 信息类型 消息长度 消息内容 //通过区分是不是私聊 char c1 message.charAt(0); //获取消息的第一个字符 判断是不是 try { OutputStream os socket.getOutputStream(); //输出流 DataOutputStream dos new DataOutputStream(os); if (c1 ) { int index message.indexOf( ); //索引字符位置 String fid message.substring(1, index); //和“ ”之间就是好友名称 substring 截取 String msg message.substring(index 1)来自的account私聊消息; //获取发送者昵称 System.out.println(fid msg); dos.writeInt(1); //私聊 //发送好友名称及消息 依旧长度内容 int fidLen fid.getBytes().length; dos.writeInt(fidLen); dos.write(fid.getBytes()); int msgLen msg.getBytes().length; dos.writeInt(msgLen); dos.write(msg.getBytes()); } else { dos.writeInt(2);//群聊 byte[] msgs message.getBytes(UTF-8); int len msgs.length; dos.writeInt(len); dos.write(msgs); } dos.flush(); } catch (IOException e) { throw new RuntimeException(e); } }用作为私聊标识用1和2区分私聊/群聊用writeInt发送可变长度数据服务端——客户端协议读取转发public String receive(InputStream is,Socket socket){ DataInputStream disnew DataInputStream(is); try { //读取消息类型 私聊1 群聊2 int typedis.readInt(); if(type1){ int fidLendis.readInt(); byte[] fidnew byte[fidLen]; dis.readFully(fid); String fidStrnew String(fid); int msgLendis.readInt(); byte[] msgsnew byte[msgLen]; dis.readFully(msgs); String msgnew String(msgs); System.out.println(收到一条发给fidStr 的私聊消息msg); return 1#fidStr#msg; }else{ int lendis.readInt(); byte[] msgsnew byte[len]; dis.readFully(msgs); String msgnew String(msgs,UTF-8); for (int i 0; i socketList.size(); i) { ClientUser clientUsersocketList.get(i); Socket socket2clientUser.socket; if (socket2socket){ System.out.println(clientUser.accountmsg); } } return 2#msg; } } catch (IOException e) { throw new RuntimeException(e); } }服务端收到后统一用#分隔符封装转发私聊返回格式return 1#fidStr#msg;群聊返回格式return 2#msg;服务端proClientMsg解析时public void proClientMsg(Socket socket){ new Thread(()-{ //登录 //读取用户名 String account proLogin(socket); ClientUser clientUsernew ClientUser(account, socket); //保存clientUser 对象 包含一个socket和一个用户名 socketList.add(clientUser); while (true){ try { InputStream isclientUser.socket.getInputStream(); String msgreceive(is,clientUser.socket); String[] datasmsg.split(#);//通过#将消息拆分成多个片段 变成数组数据 String typedatas[0]; if(type.equals(1)){ String fiddatas[1]; String msg1datas[2]; for (int i 0; i socketList.size(); i) { ClientUser otherCu socketList.get(i); if (otherCu.account.equals(fid)){ send(clientUser.accountmsg1,otherCu.socket.getOutputStream()); break; } } }else{ String msg1datas[1]; for (int i 0; i socketList.size(); i) { ClientUser otherCusocketList.get(i); Socket socket1otherCu.socket; if (socket1!clientUser.socket){ send(clientUser.accountmsg1,socket1.getOutputStream()); } } } } catch (IOException e) { throw new RuntimeException(e); } } }).start(); }PSindexOf(a) //索引字符a位置substring(1,4) //截取字符串中从第二个字符到第五个字符之间的内容split(#) //通过#将消息拆分成多个片段String[] datasmsg.split(#); //将拆分的消息变成数组数据

相关新闻

ESP32-S3-LCD-2.8B开发板全解析:从硬件集成到LVGL图形界面实战

ESP32-S3-LCD-2.8B开发板全解析:从硬件集成到LVGL图形界面实战

1. 项目概述:一块能“思考”的屏幕如果你玩过Arduino或者树莓派,对那种需要外接屏幕、再连一堆杜邦线的开发方式一定不陌生。整个过程繁琐,而且最终的成品往往体积臃肿,线缆凌乱。今天要聊的“ESP32-S3-LCD-2.8B”,就是…

2026/8/1 14:09:01 阅读更多 →
ESP32-S3触摸屏开发实战:从硬件选型到LVGL图形界面开发

ESP32-S3触摸屏开发实战:从硬件选型到LVGL图形界面开发

1. 项目概述:一块能“摸”的智能屏幕如果你玩过ESP32,那你肯定知道它是个功能强大的物联网开发板,能连Wi-Fi、蓝牙,做各种智能设备。但如果你觉得它只能控制个LED灯、读个传感器数据,那就有点小看它了。今天聊的这块“…

2026/8/1 14:09:01 阅读更多 →
阿里云盘Refresh Token获取工具:三步扫码开启云盘自动化新时代

阿里云盘Refresh Token获取工具:三步扫码开启云盘自动化新时代

阿里云盘Refresh Token获取工具:三步扫码开启云盘自动化新时代 【免费下载链接】aliyundriver-refresh-token QR Code扫码获取阿里云盘refresh token For Web 项目地址: https://gitcode.com/gh_mirrors/al/aliyundriver-refresh-token 还在为每天手动上传文…

2026/8/1 14:09:01 阅读更多 →

最新新闻

文字优化团队七年成长:从学术润色到智能协同

文字优化团队七年成长:从学术润色到智能协同

1. 项目概述:一个文字优化团队的七年成长史 2018年夏天,在北京朝阳区的一间共享办公空间里,三个年轻人围坐在笔记本电脑前激烈讨论。他们当时可能没想到,这个以"文字优化"为起点的小团队,会在七年后的今天发…

2026/8/1 15:00:23 阅读更多 →
让老旧Mac焕发新生:macOS Catalina补丁工具完整指南

让老旧Mac焕发新生:macOS Catalina补丁工具完整指南

让老旧Mac焕发新生:macOS Catalina补丁工具完整指南 【免费下载链接】macos-catalina-patcher macOS Catalina Patcher (http://dosdude1.com/catalina) 项目地址: https://gitcode.com/gh_mirrors/ma/macos-catalina-patcher 你是否还在为苹果官方不再支持的…

2026/8/1 15:00:23 阅读更多 →
Sunshine游戏串流:5分钟搭建你的私人云游戏服务器

Sunshine游戏串流:5分钟搭建你的私人云游戏服务器

Sunshine游戏串流:5分钟搭建你的私人云游戏服务器 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾梦想过在平板上畅玩PC大作?是否想在客厅电视上享…

2026/8/1 15:00:23 阅读更多 →
开源机器人机械手终极指南:5分钟打造你的低成本抓取系统

开源机器人机械手终极指南:5分钟打造你的低成本抓取系统

开源机器人机械手终极指南:5分钟打造你的低成本抓取系统 【免费下载链接】openhand-hardware CAD files for the OpenHand hand designs 项目地址: https://gitcode.com/gh_mirrors/op/openhand-hardware 你是否在为机器人项目寻找既专业又经济的抓取解决方案…

2026/8/1 15:00:23 阅读更多 →
彻底解决Python Crypto模块导入错误:从pycrypto到pycryptodome的完整指南

彻底解决Python Crypto模块导入错误:从pycrypto到pycryptodome的完整指南

1. 问题缘起:一个看似简单却困扰无数人的“幽灵”错误如果你正在用Python处理加密、解密或者数字签名相关的任务,十有八九会用到Crypto这个库。然而,当你信心满满地敲下pip install crypto,然后在代码里import Crypto时&#xff0…

2026/8/1 15:00:23 阅读更多 →
智造微观世界,芯动大国工业:2026武汉国际芯片及半导体产业博览会全瞻

智造微观世界,芯动大国工业:2026武汉国际芯片及半导体产业博览会全瞻

2026武汉芯片博览会:透视半导体全产业链的重构逻辑 锁定九月江城!2026武汉半导体产业博览会,开启数智时代底层新局从IC设计到先进制程:2026武汉芯片展,定义未来工业的“心脏”智造微观世界,芯动大国工业&am…

2026/8/1 14:59:23 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/8/1 13:02:46 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →