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,一经查实,立即删除!

相关文章

python爬虫验证码的识别_Python爬虫识别验证码

Python爬虫识别验证码安装tesserocrpip3 install tesserocr pillow识别测试将验证码图片放到项目根目录下&#xff0c;用tesserocr库识别该验证码&#xff0c;代码如下所示&#xff1a;import localelocale.setlocale(locale.LC_ALL, C)import tesserocrfrom PIL import Imagei…

python对象属性赋值_关于python对象 中dict属性赋值的疑问

下面这段代码 很奇怪把两个对象放在一个 list中然后循环操作两个对象 中 一个dict key的数值但是循环操作输出的时候发现两个对象的 值会叠加#!/usr/bin/env pythonclass test:base {score : 100}def setBase(self, score):self.base[score] scoredef addScore(self):self.se…

java mysql jsp分页代码_JSP实现数据库分页显示源代码例

JSP实现数据库分页显示源代码例2018-11-25分页显示数据库信息分页显示数据库记录用户名性别电话E-Mailtry{//驱动程序名String driverName"sun.jdbc.odbc.JdbcOdbcDriver";//连接字符串String url"jdbc:odbc:userdata";//加载驱动程序Class.forName(driver…

java解压zip异常_java解压zip文件示例

若是使用Java自带的压缩工具包来实现解压缩文件到指定文件夹的功能&#xff0c;因为jdk提供的zip只能按UTF-8格式处理&#xff0c;而Windows系统中文件名是以GBK方式编码的&#xff0c;所以如果是解压一个包含中文文件名的zip包&#xff0c;会报非法参数异常&#xff0c;所以要…

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

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

java怎么设置背景_如何在Java中设置背景图片?

小编典典根据应用程序或小程序是使用AWT还是Swing&#xff0c;答案会略有不同。(基本上&#xff0c;以J诸如JApplet和JFrame为开头的类是Swing和Appletand Frame是AWT。)无论哪种情况&#xff0c;基本步骤都是&#xff1a;将图像绘制或加载到Image对象中。在要绘制背景的绘画事…

python调用selenium的get_Python – selenium webdriver在循环中停留在.get()

我有一个Python代码片段,它使用Selenium Webdriver来循环一些历史性的棒球赔率.代码的第一部分旨在从调度表(包含大约57个需要循环的页面)中获取所有单独的游戏URL,并将它们存储在列表中.我第一次测试它它工作得很好 – 现在,无论出于何种原因,driver.get()函数似乎无法正常工作…

java什么叫元素_什么是Java做什么 - 每个元素使它们成为对象类型?

这个问题关于如何处理Java for-each循环中的元素。我有一个哈希表&#xff0c;它是一个LinkedLists数组。 LinkedList节点的数据部分包含TableEntry&#xff0c;其中K和V是键和值类型。我写了一个for循环来查看LinkedList中的每个TableEntry&#xff0c;检查一个键是否等于Tabl…

python读取dicom文件的包_python 读取DICOM头文件的实例

用dicompyler软件打开dicom图像&#xff0c;头文件如图所示&#xff1a;当然也可以直接读取&#xff1a;ds dicom.read_file(H:Datadata216622.16.840.1.113662.2.0.105002416.1489146183.701CTCT#0#21662#E7AB693D.dcm)print ds>>(0008, 0008) Image Type CS: [ORIGINA…

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

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

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

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

java编写静态工具类_Java编程中静态内部类与同步类的写法示例

java静态内部类将某个内部类定义为静态类&#xff0c;跟将其他类定义为静态类的方法基本相同&#xff0c;引用规则也基本一致。不过其细节方面仍然有很大的不同。具体来说&#xff0c;主要有如下几个地方要引起各位程序开发人员的注意。(一)一般情况下&#xff0c;如果一个内部…

python流量实时统计_Python实现获取nginx服务器ip及流量统计信息功能示例

本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;#!/usr/bin/python#codingutf8log_file "/usr/local/nginx/logs/access.log"with open(log_file) as f:contexts f.readlines()# define ip d…

java实验1机动车实验目的_《Java程序设计》实验指导书.doc

《Java程序设计》实验指导书实验一、熟悉JDK环境及主要命令一、实验目的1) 熟悉JDK的环境配置2) 掌握JDK的命令3) 掌握Java Application程序的开发过程&#xff0c;并编写一个Java Application程序二、实验内容1&#xff0e;按照上课所学知识&#xff0c;为自己的机器配置环境变…

python selenium 下载文件_Python Selenium —— 文件上传、下载,其实很简单

很多selenium学习者被浏览器弹出的文件上传、下载框折磨的痛不欲生&#xff0c;今天博主就带你们轻松搞定上传和下载问题。上传上传弹框文件上传是所有UI自动化测试都要面对的一个头疼问题&#xff0c;要处理这个问题&#xff0c;我们需要&#xff1a;首先&#xff0c;要区分出…

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

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

python执行语句转换成str_python3.x,_python3.4.3如何转换str字符串?,python3.x - phpStudy...

python3.4.3如何转换str字符串&#xff1f;#codingutf8import pymssqlclass MSSQL:def __init__(self,host,user,pwd,db):self.host hostself.user userself.pwd pwdself.db dbdef __getConnect(self):"""得到连接信息返回&#xff1a; conn.cursor()"…

java中strictfp么意思_什么时候应该在java中使用“strictfp”关键字?

Strictfp确保您从每个平台上的浮点计算获得完全相同的结果。如果不使用strictfp&#xff0c;JVM实现可以在可用的地方使用额外的精度。Within an FP-strict expression, allintermediate values must be elementsof the float value set or the doublevalue set, implying that…

python导入包的输入法_python 模块和包的导入

http://www.cnblogs.com/linhaifeng/articles/6379069.html1,模块开源模块https://pypi.python.org/pypipip/ easy_install安装python setup.py buildpython setup.py installpip install xxxx添加环境变量import os,sysprint (os.path.dirname(os.path.dirname(os.path.dirnam…

java 包权限 子包_Java 包和访问权限

一开始学Java&#xff0c;就用的eclipse。对包的印象就是右键新建而已。至于导入包&#xff0c;等报错了再导。被IDE奴役的傻孩子。现在就清晰地梳理一遍吧~本文基于Mars老师的Java4Android视频。包的作用软件包为Java类提供了命名空间。根据包名&#xff0c;会生成相应的文件夹…