多人聊天UDP

服务端

package 多人聊天;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Gserver implements Runnable {private int Port = 9999;private ServerSocket SS;private Socket socket;private ArrayList clients = new ArrayList();  //保存客户端线程public Gserver(){try{			SS = new ServerSocket(Port);new Thread(this).start();}catch(Exception ex){		}		}public void run(){try{while(true){socket = SS.accept();ChatThread ct = new ChatThread(socket);clients.add(ct);ct.start();}			}catch(Exception ex){	}}class ChatThread extends Thread{private Socket s;private InputStream is;private OutputStream os;private BufferedReader br;private PrintStream ps;public ChatThread(Socket socket) throws Exception{this.s = socket;is = this.s.getInputStream();os = this.s.getOutputStream(); br = new BufferedReader(new InputStreamReader(is));ps = new PrintStream(os);}public void run(){try{while(true){String str = br.readLine();	sendMessage(str);}}catch (Exception ex){}}public void sendMessage(String str){for(int i=0; i<clients.size(); i++){ChatThread ct = (ChatThread)clients.get(i);ct.ps.println(str);}}}public static void main(String[] args){new Gserver();}
}

客户端

package 多人聊天;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Gclient extends JFrame implements ActionListener, Runnable {private Socket socket;private int Port = 9999;private InetAddress ip;private String name;private JTextArea area = new JTextArea("以下是聊天内容:\n");private JTextField field = new JTextField("");public Gclient(){this.setTitle("客户端");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.add(field,BorderLayout.NORTH);field.addActionListener(this);this.add(area, BorderLayout.CENTER);		this.setSize(240, 260);this.setVisible(true);name = JOptionPane.showInputDialog("输入昵称:");try{ip = InetAddress.getByName("Localhost");socket = new Socket(ip,Port);JOptionPane.showMessageDialog(this, "连接成功");this.setTitle("客户端:" + name);new Thread(this).start();}catch (Exception ex){			}}public void run(){try{while(true){InputStream is = socket.getInputStream();BufferedReader bf = new BufferedReader(new InputStreamReader(is));String str = bf.readLine();area.append(str + '\n');}}catch (Exception ex){	}}public void actionPerformed(ActionEvent e){try{OutputStream os = socket.getOutputStream();PrintStream ps = new PrintStream(os);ps.println(name + "说:" + field.getText());field.setText("");}catch (Exception ex){			}}public static void main(String[] args) {new Gclient();}
}

结果

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

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

相关文章

零基础小白怎么准备蓝桥杯-蓝桥杯竞赛经验分享

零基础小白怎么准备蓝桥杯-蓝桥杯竞赛经验分享 前言竞赛简介竞赛目的如何备战1.基础学习2.实战训练&#xff08;非常重要&#xff09; 资料分享 前言 博主在蓝桥杯中获得过十四届Java B 组的省一国二&#xff0c;本文为大家介绍一下蓝桥杯并分享一下自己的参赛经验。 竞赛简介…

golang学习笔记——go互斥锁

文章目录 互斥锁&#xff1a; sync.Mutexsync.WaitGroup 计数器例子func (*WaitGroup) Addfunc (*WaitGroup) Donefunc (*WaitGroup) Wait 读写互斥锁参考资料 临界区总是需要通过同步机制进行保护的&#xff0c;否则就会产生竞态条件&#xff0c;导致数据不一致。 互斥锁&…

封装校验-----Vue3+ts项目

登录校验页面 <script setup lang"ts"> import { ref } from vue import { mobileRules, passwordRules } from /utils/rules const mobile ref() const password ref() </script><!-- 表单 --><van-form autocomplete"off">&l…

数位统计DP

数位DP 数位&#xff08;digit&#xff09;指的是一个数字中的每一位。例如&#xff0c;对于整数1234来说&#xff0c;它有四个数位&#xff0c;分别是1、2、3和4。在数位统计 DP 中&#xff0c;我们通常将数字拆解成各个数位&#xff0c;并使用这些数位进行状态定义和转移。通…

Vue在Computed计算属性下,获取Promise then的返回值无效为空

原因&#xff1a;Promise是异步的&#xff0c;如果业务逻辑不放在then内部&#xff0c;那么可能时机无法拿到then内返回的变量。 解决方案&#xff1a;Vueuse库提供了异步计算属性的钩子&#xff0c;使用Vueuse库的computedAsync即可。 import { computedAsync } from vueuse…

电脑设置代理IP,上网怎么使用代理

在我们的日常生活中&#xff0c;代理IP的使用越来越常见。当我们需要隐藏自己的真实IP地址时&#xff0c;代理IP就成为了我们的不二选择。那么&#xff0c;如何设置代理IP来固定上网地址呢&#xff1f;本文将详细介绍代理IP的设置方法以及如何使用代理IP固定上网地址。 一、代…

Failed to connect to github.com port 443 after 21055 ms: Timed out

目前自己使用了梯*子还是会报这样的错误&#xff0c;连接不到的github。 查了一下原因&#xff1a; 是因为这个请求没有走代理。 解决方案&#xff1a; 设置 -> 网络和Internet -> 代理 -> 编辑 记住这个IP和端口 使用以下命令&#xff1a; git config --global h…

Kafka集群调优

一、前言 我们需要对4个规格的kafka能力进行探底&#xff0c;即其可以承载的最大吞吐&#xff1b;4个规格对应的单节点的配置如下&#xff1a; 标准版&#xff1a; 2C4G铂金版&#xff1a; 4C8G专业版&#xff1a; 8C16G企业版&#xff1a; 16C32G 另外&#xff0c;一般来讲…

git 分支的创建与删除

一 创建本地分支 git checkout -b codetwo //创建本地分支 codetwo git branch newcode //创建本地分支newcode创建的分支如下图&#xff1a; 用checkout的方式创建&#xff0c;只是创建的同时还切换到了这个本地分支 二 创建远程分支 git branch newcode //创…

[leetcode 双指针]

1. 三数之和 M :::details 给你一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;请你找出所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例…

ALPHA开发板烧录工具MfgTool烧写原理

一. 简介 MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件&#xff0c;可以在 NXP 官网下载到。运行在windows下。可以烧写uboot.imx、zImage、dtb&#xff0c;rootfs。通过 USB口进行烧写。 上一篇文章简单了解了 烧录工具MfgTool &#xff08;针对ALPH…

TrustZone之数据、指令和统一缓存(unified caches)

在Arm架构中,data caches是物理标记(physically tagged)的。物理地址包括该行来自哪个地址空间,如下所示: 对于NP:0x800000的缓存查找永远不会命中使用SP:0x800000标记的缓存行。这是因为NP:0x800000和SP:0x800000是不同的地址。 这也影响缓存维护操作。考虑前面图表中的示…

人工智能学习8(集成学习之xgboost)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm 集成学习XGBoost(Extreme Gradient Boosting)极端梯度提升树1.最优模型的构建方法XGBoost目标函数案例1&#xff1a;泰坦尼克号案例2&#xff1a;对奥拓集团差评进行正确分类。数据准备&#xff1a;1.第一种…

【Maven】如何编写Maven自定义插件

当编写 Maven 自定义插件时&#xff0c;需要遵循一定的规范和结构。以下是更为详细的步骤&#xff0c;以及相关的解释&#xff1a; ### 步骤一&#xff1a;创建 Maven 项目 首先&#xff0c;使用 Maven 的 archetype 插件创建一个新的 Maven 项目作为插件的容器。在命令行中执…

JPA构建多条件查询

方式一 new Specification匿名内部类&#xff0c;通过实现该匿名内部类的toPredicate方法构建查询sql Specification<T> specification new Specification<T>() {Overridepublic Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, Cri…

基于深度学习yolov5行人社交安全距离监测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介系统工作原理主要组成部分技术实现优势和特点应用场景和前景 二、功能三、系统四. 总结 一项目简介 基于深度学习 YOLOv5 的行人社交安全距离监测系统是一种…

数据仓库与数据挖掘复习资料

一、题型与考点[第一种] 1、解释基本概念(中英互译解释简单的含义)&#xff1b; 2、简答题(每个10分有两个一定要记住)&#xff1a; ① 考时间序列Time series(第六章)的基本概念含义解释作用&#xff08;序列模式挖掘的作用&#xff09;&#xff1b; ② 考聚类(第五章)重点考…

自动化定时发送天气提醒邮件

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;如喜欢麻烦您点个&#x1f44d;或者点个⭐&#xff01; &#x1f…

配置端口安全示例

组网需求 如图1所示&#xff0c;用户PC1、PC2、PC3通过接入设备连接公司网络。为了提高用户接入的安全性&#xff0c;将接入设备Switch的接口使能端口安全功能&#xff0c;并且设置接口学习MAC地址数的上限为接入用户数&#xff0c;这样其他外来人员使用自己带来的PC无法访问公…

华为配置风暴控制示例

组网需求 如下图所示&#xff0c;SwitchA作为二层网络到三层路由器的衔接点&#xff0c;需要防止二层网络转发的广播、未知组播或未知单播报文产生广播风 配置思路 用如下的思路配置风暴控制。 通过在GE0/0/1接口视图下配置风暴控制功能&#xff0c;实现防止二层网络转发的…