java使用socket实现一个简单的聊天室

1. 服务端

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;public class ChatServer {private static final int PORT = 8070;private static List<ClientHandler> clients = new ArrayList<>();public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(PORT);System.out.println("Chat Server started on port " + PORT);while (true) {Socket clientSocket = serverSocket.accept();System.out.println("New client connected: " + clientSocket);ClientHandler clientHandler = new ClientHandler(clientSocket);clients.add(clientHandler);clientHandler.start();}} catch (IOException e) {e.printStackTrace();}}public static void broadcastMessage(String message) {for (ClientHandler client : clients) {client.sendMessage(message);}}}

2. 客户端消息处理器器


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;public class ClientHandler extends Thread {private Socket clientSocket;private BufferedReader reader;private PrintWriter writer;public ClientHandler(Socket socket) {this.clientSocket = socket;try {reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));writer = new PrintWriter(clientSocket.getOutputStream(), true);} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {try {String message;while ((message = reader.readLine()) != null) {System.out.println("Received message from client: " + message);ChatServer.broadcastMessage(message);}} catch (IOException e) {e.printStackTrace();}}public void sendMessage(String message) {String pod_name = System.getenv().get("POD_NAME");if (pod_name == null || "".equals(pod_name)) {pod_name = "fail to obtain pod name";}writer.println(pod_name + ":" + message);}
}

3. 客户端


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;public class ChatClient {private static String SERVER_ADDRESS = "localhost";private static int SERVER_PORT = 8070;public static void main(String[] args) {try {if (args.length != 2) {SERVER_ADDRESS = "localhost";SERVER_PORT = 8070;} else {SERVER_ADDRESS = args[0];SERVER_PORT = Integer.parseInt(args[1]);}Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);System.out.println("Connected to chat server:" + args[0] + ":" + args[1]);BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);// 启动一个线程来接收消息Thread messageReceiverThread = new Thread(() -> {try {String message;while ((message = reader.readLine()) != null) {System.out.println(message);}} catch (IOException e) {e.printStackTrace();}});messageReceiverThread.start();// 从控制台输入消息,并发送到服务器BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));String userInput;while ((userInput = consoleReader.readLine()) != null) {writer.println(userInput);}// 关闭资源writer.close();reader.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芯片工程系列(5)2.5D 3D封装

0 英语缩写 硅通孔&#xff08;Through Silicon Via&#xff0c;TSV&#xff09;硅中介层&#xff08;Silicon Interposer&#xff09;物理气象沉淀法&#xff08;Physical Vapor Deposition&#xff0c;PVD&#xff09;DRIE、CVD、PVD、CMP等设备CoWoS&#xff08;Chip on Wa…

【开发环境搭建篇】Nacos的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

利用K8S Statefulset搭建Etcd集群 - 本地存储

目录 概述测试环境yaml配置service.yamlcluster.yaml Q&A参考链接 概述 公司因项目需要使用K8S部署ETCD集群供其他业务调用&#xff0c;网上搜索了解了下&#xff0c;一般K8S搭建ETCD集群大部分都是使用Etcd Operator来搭建。但是公司的项目运行在离线ARM架构平台&#xf…

安卓手机系统跳过app启动广告软件

跳过广告关于此应用声明&#xff1a; 应用利用了安卓系统的辅助功能API&#xff0c;可以读取您手机屏幕上显示的所有内容&#xff0c;并且可以以您的名义进行屏幕点击等操作。* 轻量无广告&#xff0c;不联网&#xff0c;也不需要任何权限&#xff1b;* 请务必在系统设置中开启…

【C++】分球

题目描述 7个人分球&#xff0c;共有n个球&#xff0c;所有人得到的球必须相等。请输出最少剩下的球数。 输入 输入一行一个正整数n&#xff08;可能存在前导零&#xff09;。 输出 输出一行一个整数&#xff0c;如题所述答案。 样例输入 Copy 50样例输出 Copy 1提示 …

Redis中AOF、RDB和复制功能对过期键的处理

AOF、RDB和复制功能对过期键的处理 生成RDB文件 在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时&#xff0c;程序会对数据库中的键进行检查&#xff0c;已过期的键不会被保存到新创建的RDB文件中。 例子 举个例子&#xff0c;如果数据库中包含三个键k1、k2、k3&#x…

【目标检测实验系列】AutoDL线上GPU服务器租用流程以及如何用Pycharm软件远程连接服务器进行模型训练 (以Pycharm远程训练Yolov5项目为例子 超详细)

目录 1. 文章主要内容2. 租用AutoDL服务器详细教程2.1 注册AutoDL账号&#xff0c;并申请学生认证(学生认证有优惠&#xff0c;如果不是学生可以忽略此点)2.2 算力市场选择GPU&#xff0c;并选择初始化配置环境2.3 控制台参数解析&#xff0c;并使用相关参数登录Xftp(Windows与…

LangChain核心模块 Retrieval——文本分割

Text Splitters 文本分隔 检索的关键部分时仅获取文档的相关部分&#xff0c;主要任务之一是将大文档分割为更小的块。 最简单的例子是&#xff0c;将长文档分割成更小的块&#xff0c;以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器&#xff0c;可以轻松地拆…

Office办公软件之word的使用(一)

前几天调整公司招标文件的格式&#xff0c;中途遇到一些问题&#xff0c;感觉自己还不是太熟悉操作&#xff0c;通过查阅资料&#xff0c;知道了正确的操作&#xff0c;就想着给记下来。如果再次遇到&#xff0c;也能很快地找到解决办法。 一、怎么把标题前的黑点去掉 解决办法…

[ C++ ] STL---list的模拟实现

目录 结点类的模拟实现 迭代器类的模拟实现 构造函数 前置与后置 前置- -与后置 - - 与 !运算符重载 * 运算符重载 -> 运算符重载 普通迭代器总体实现代码 list类的实现 list类的成员变量 构造函数 迭代器 insert(&#xff09; erase() push_front/push_back…

Qt-QDialog非模态置于窗口之上且操作主窗口不隐藏dialog的方法

方法为&#xff1a; QDialog* dialog new QDialog; dialog->setParent(this, dialog->windowFlags()); dialog->show(); dialog->raise();QDialog继承自QWidget&#xff0c;setParent方法会重置其windowFlags&#xff0c;因此我们将其原始windowFlags传入作为参数…

ffmpeg/ffplay指令

ffplay 1、音频 (1)、播放PCM文件: ffplay -ar 8000 -ac 1 -f s16le input.pcm -ar 8000 设置采样率为8000 Hz。 -ac 1 设置声道数为1&#xff08;单声道&#xff09;。 -f s16le 指定音频格式为16位小端有符号整数&#xff08;PCM&#xff09; (2)、播放G.711 a-law文件: …

英语10大词性

英文缩写v 代表动词 对应的英单词是verb 音标 英[vɜːb] 美[vɜːrb] 英文缩写n 代表名词 对应的英文单词是noun 音标 英[naʊn] 美[naʊn] 英文缩写prep 代表介词 对应的英文单词是preposition 音标 英[ˌprepəˈzɪʃn…

【SQL】1527. 患某种疾病的患者(like;通配符)

前述 知识点回顾&#xff1a; MySQL 使用OR在LIKE查询中比较多个字段 %&#xff1a;表示任意字符&#xff08;包括0个或多个&#xff09;_&#xff1a;表示任意单个字符匹配空格&#xff1a;直接用空格就行&#xff0c;例如&#xff0c;% DIAB1%可以匹配字符串ACNE DIAB100 …

非插件方式为wordpress添加一个额外的编辑器

在WordPress中&#xff0c;要添加一个额外的区块编辑器(通常指的是Gutenberg区块编辑器中的一个自定义区块)&#xff0c;你需要编写一些PHP代码来注册新的区块&#xff0c;并可能还需要一些JavaScript来处理前端的逻辑。下面是一个简单的示例&#xff0c;展示了如何注册一个自定…

Python Flask框架 -- ORM模型与表的映射

ORM模型 对象关系映射(Object Relationship Mapping)&#xff0c;简称ORM&#xff0c;是一种可以用Python面向对象的方式来操作关系型数据库的技术&#xff0c;具有可以映射到数据库表能力的Python类我们称之为ORM模型。一个ORM模型与数据库中一个表相对应&#xff0c;ORM模型中…

【国家计算机二级考试C语言.2024】学习备忘录

说明 分值 4060100 40分&#xff1a; 这里面有一大堆程序结果选这题&#xff0c;如果手速还可以。那遇到有疑问的情况就自己去倒计算器的ad E上面去打一打。能够跑出来&#xff0c;结果那是100%的没问题。 有些概念题比较讨厌&#xff0c;只能自己去记忆了。要去背诵熟熟的。…

GPU 使用率监测及可视化

1. 使用 nvidia-smi可视化 直接在终端输入nvidia-smi动态查看GPU的使用情况watch -n 0.5 nvidia-smi其中0.5表示每隔0.5秒更新一次,时间可以调整 2. 使用nvitop可视化 2.1 nvitop的使用 (1) 安装 pip install nvitop(2) 查看GPU使用率 nvitop

torch.nn.Embedding

torch.nn.Embedding flyfish 此模块通常用于存储单词嵌入并使用索引检索它们。模块的输入是索引列表&#xff0c;输出是对应的单词嵌入。 import torch import torch.nn as nn torch.manual_seed(0) embedding nn.Embedding(10, 3) # an Embedding module containing 10 t…

springboot296基于个性化定制的智慧校园管理系统设计与开发

智慧校园管理系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统校园综合信息管理难度大&…