java的serversocket_Java ServerSocket 实现聊天室功能(简易版)

大体实现功能可以选择房间,可以与房间中的用户进行实时的交流

715a56851b17

说在前面的话:

serverSocket.accept() 会形成阻塞

scanner.hasNextLine() 和 scanner.nextLine() 也会形成阻塞

windows 下需要打开telnet服务。请自行百度

实现思路:

用户连接上服务器后选择房间号,进入房间。进入房间后会向房间中所有的用户打印出用户进入房间的提醒。

用户进入房间后,输入姓名即可发言。

说起来很简单,代码实现更简单。我们需要一个保存房间用户的容器。我这里使用的是。

// 保存聊天室中的用户数据

private static Map>> charScnnerMap = new HashMap<>();

使用 try-with-resource 语法防止出现资源未关闭的情况出现。

直接上代码

package com.annie;

import com.sun.org.apache.xml.internal.resolver.readers.ExtendedXMLCatalogReader;

import java.io.*;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.*;

public class App {

// 保存聊天室中的用户数据

private static Map>> charScnnerMap = new HashMap<>();

public static void print(List> charNames, String conn) {

for (Map charName : charNames) {

Set> entries = charName.entrySet();

for (Map.Entry entry : entries) {

entry.getValue().println(conn);

}

}

}

public static void main(String[] args) throws InterruptedException {

charScnnerMap.put("1", new ArrayList>());

charScnnerMap.put("2", new ArrayList>());

charScnnerMap.put("3", new ArrayList>());

// 监控本机端口 9189

try (ServerSocket serverSocket = new ServerSocket(9189)) {

while (true) {

Socket accept = serverSocket.accept();

new Thread(() -> {

try (InputStream inputStream = accept.getInputStream();

OutputStream outputStream = accept.getOutputStream();

Scanner scanner = new Scanner(inputStream, "UTF-8");

PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true)) {

// 定位房间

String number = "-1";

out.println("Please enter the room number.(1-3): ");

number = scanner.nextLine();

if (!number.equals("1") && !number.equals("2") && !number.equals("3")) {

while (true) {

out.println("Please enter the correct room.(1-3): ");

number = scanner.nextLine();

if (number.equals("1") || number.equals("2") || number.equals("3")) {

break;

}

}

}

// 显示姓名

out.println("Please enter your name: ");

String name = scanner.nextLine();

List> charNames = charScnnerMap.get(number);

Map m = new HashMap<>();

m.put(name, out);

charNames.add(m);

// 打印内容

print(charNames, "Welcome [" + name + "] to the room.");

boolean b = true;

while (b && scanner.hasNextLine()) {

String s = scanner.nextLine();

print(charNames, name + ": " + s);

if (s.equals("BB")) {

print(charNames, "[" + name + "]Exit the room");

b = false;

}

}

} catch (Exception e) {

e.printStackTrace();

}

}).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

结尾:如果您觉得这边文章对您有帮助,麻烦

math?formula=%5Ccolor%7Bred%7D%7B%E7%82%B9%E8%B5%9E%7D

math?formula=%5Ccolor%7Bred%7D%7B%E8%AF%84%E8%AE%BA%7D

math?formula=%5Ccolor%7Bred%7D%7B%E8%AF%84%E8%AE%BA%7D。您的支持是对笔者的最大帮助😘😘😘

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

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

相关文章

ensp删除所有命令_HCIA学习笔记——eNSP配置NAT技术

今天用华为的eNSP做了关于NAT的实验&#xff0c;我把它发了出来&#xff0c;有需要的小伙伴可以收藏一下。分别配置了静态的NAT&#xff0c;NAT Outbound配置&#xff0c;Easy IP配置&#xff0c;NAT server配置。接口配置如图所示。在网关路由器上配置访问外网的默认路由。配置…

java程序员用代码写的情书_用代码写的三行情诗,你懂得程序员的浪漫吗?

原标题&#xff1a;用代码写的三行情诗&#xff0c;你懂得程序员的浪漫吗&#xff1f;在一般人眼里&#xff0c;程序员是一群古板&#xff0c;技术宅&#xff0c;不懂得浪漫的屌丝&#xff0c;但其实这些大神们浪漫起来也是相当可以的&#xff01;下面让我们来看一下程序员们用…

对比四大企业级linux版本_Linux家族族谱

大体上来讲&#xff0c;Linux分为两个生态体系&#xff0c;红帽和debian。商业版本以Redhat为代表&#xff0c;开源社区版本则以debian为代表。红帽家族redhat &#xff1a;红帽自家服务器centos &#xff1a;基于红帽重新封装的去掉版权信息的免费版本fedora &#xff1a;基于…

mysql vim 命令_Vim基本命令必知必会

光标移动定位方式hjkl (强例推荐使用其移动光标&#xff0c;但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头0 → 数字零&#xff0c;到行首^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格&#xff0c;tab&#xff0c;换行&#xff0c;回车等)$ →…

内存条上面参数详解_为什么买内存条要看时序?别以为内存频率高性能就好

2016年开网吧买了400多根DDR4 8G内存条&#xff0c;一根180。2017年网吧赔了钱&#xff0c;我把电脑卖了&#xff0c;内存600一根&#xff0c;结果开网吧的钱赚回来了。囤内存挣回了开网吧的钱转眼间到2019年&#xff0c;内存就跌回了原来的价钱&#xff0c;200多块就又能买到D…

android 获取monkey日志_Android压力测试:monkey压力测试实战

主要分享的主题是 Android App 专项测试&#xff0c;通过 monkey 进行压力测试。一.测试步骤1.安装ADB2.连接被测手机和电脑3.打开CMD命令行4.输入monkey命令adb shell monkey -p your.package.name?--pct-touch 30?--ignore-crashes ?--ignore-timeouts--throttle 250?-s …

java工程怎么构造成moven_将普通java工程结构改为由maven管理的工程结构域

第一次尝试些博客记录一下自己的学习心得!1. http://maven.apache.org/download.cgi 这是maven 的下载链接进入链接下载一个maven 包这是我的windows10 系统下载的版本2 . 将下载好的文件解压后放入任意位置(一般建议放到自己常用的文件夹下边)并记住该路径G:\xiangmuwar …

python 函数进度条怎么_刷新你对进度条的认识,用python写出不一样的进度条

1 简介在日常工作中&#xff0c;我们运行程序经常会用到「循环迭代」&#xff0c;假如这个执行时间很短&#xff0c;那倒也无所谓。但是有一些过程耗时蛮长的&#xff0c;给其加上「进度条」(progress bar)&#xff0c;可以帮我们监控代码执行进度&#xff0c;以及过程出现异常…

acer软件保护卡清除工具clear_使用Windows 10内置工具释放硬盘空间的最佳方法

如果您的磁盘空间不足&#xff0c;可以使用 Windows 10 中内置的工具来清理垃圾文件、应用程序和游戏等&#xff0c;以优化硬盘空间。使用这些清理工具不仅能够释放空间&#xff0c;而且还有助于提高系统性能。下面小编就为大家汇总介绍 几种种最佳快捷方法&#xff0c;来释放 …

python中astr是啥_python的基本操作

该来的还是来了&#xff0c;早先某个大胖子建议我写关于python基本操作的博客&#xff0c;当时没上心&#xff0c;现在来补点账&#xff0c;也姑且算是对往昔一点回忆吧。对了&#xff0c;那胖子&#xff0c;姓王&#xff0c;所幸不住我隔壁。闲言少叙&#xff0c;python和pych…

canal mysql从库_大厂如何基于binlog解决多机房同步mysql数据(一)?

目录前言单一IDC多IDCmysql主从同步数据同步方案多机房mysql同步方案优化同步方案同步方案的问题如何解决重复插入对于DDL语句处理如何解决唯一索引冲突如何解决数据回环问题总结前言小伙伴们是否经常听说多机房部署&#xff0c;异地容灾&#xff1f;什么两地3中心&#xff0c;…

java语言怎么建立窗口awt,java.awt.Frame类:创建窗口

创建窗口是 AWT 编程的第一步&#xff0c;窗口是所有组件和面板的容器。在 Java AWT 中&#xff0c;我们使用 Frame 类来创建窗口。Frame 中文字意是“框架”&#xff0c;它的主要功能是建立窗口。AWT 建立窗口的步骤如下&#xff1a;设计 Frame 类对象&#xff0c;建立空白窗口…

sql数据导入错误代码: 0x80004005_SQL入门第八关 项目实战

不知不觉&#xff0c;学SQL已经一个多月了&#xff0c;每天下班学一个小时&#xff0c;有空做做练习题。从之前的焦虑到现在已经有了一定的自信了&#xff0c;猴子的课程真的很适合小白入门&#xff0c;尤其是SQL学习群里&#xff0c;助教老师很尽责&#xff0c;每个问题都会解…

虚拟主机选择php版本,虚拟主机的php版本如何选择

虚拟主机如何选择php版本&#xff1f;虚拟主机选择PHP版本&#xff0c;这是根据网站程序设置的。例如&#xff0c;新版本的WordPress需要PHP5.6和更高版本&#xff0c;而旧版本&#xff0c;如WordPress4&#xff0c;可以使用PHP5.2、5.3和其他更低版本。虚拟主机的PHP版本是什么…

有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...

作者&#xff1a;张人大代码效率优化复杂度 -- 一个关于输入数据量n的函数时间复杂度 -- 昂贵与代码的结构设计有着紧密关系一个顺序结构的代码&#xff0c;时间复杂度是O(1), 即任务与算例个数 n 无关空间复杂度 -- 廉价与数据结构设计有关数据结构 -- 考虑如何去组织计算机中…

图片马赛克去除工具_图片太多该如何进行排版呢?

胖友们大家好呀&#xff0c;我是三儿昨天三儿刚讲了多文字如何排版就有胖友在后台留言说问三儿如何对图片较多的内容排版那么今天三儿就来教大家图片较多时我们该怎样排版&#xff01;赶紧拿着小本本做好笔记哦&#xff01;图片的重要性图片在排版设计中&#xff0c;占有很大的…

神经网络人口预测matlab,BP神经网络预测(人口)程序(matlab)

自己测试人口预测的matlab实现&#xff1a;x[5416755196563005748258796602666146562828646536599467207662076585967295691727049972538745427636878534806718299285229871778921190859924209371794974962599754298705100072101654103008104357105851107507109300111026112704…

php如何监听页面滚动,html5中在元素滚动条在滚动时触发的事件onscroll

实例元素滚动时执行 JavaScript定义和用法onscroll 事件在元素滚动条在滚动时触发。提示&#xff1a; 使用 CSS overflow 样式属性来创建元素的滚动条。浏览器支持语法HTML 中:JavaScript 中:object.οnscrοllfunction(){myScript};JavaScript 中, 使用 addEventListener() 方…

可观测性PHP秩判据,线性系统的可控性与可观测性

现代控制理论中用状态方程和输出方程描述系统&#xff0c;输入和输出构成系统的外部变量&#xff0c;而状态为系统的内部变量&#xff0c;这就存在着系统内的所有状态是否可受输入影响和是否可由输出反映的问题&#xff0c;这就是可控性和可观测性问题。如果系统所有状态变量的…

matlab中的nlinfit,matlab中nlinfit问题!!!!!!!!!!!!

matlab中nlinfit问题&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;mip版 关注:272 答案:3 悬赏:40解决时间 2021-01-19 04:20已解决2021-01-18 13:28muinline(beta(…