服务器总类:

package GroupChat;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

/**

* 创建调用服务器线程的主类

* @author Administrator

*

*/

public class ThreadMain {

/**

* @param args

*/

public static void main(String[] args) {

ThreadMain tm=new ThreadMain();

tm.StrSer(1234);

}

public void StrSer(int port){

try {

ServerSocket ss=new ServerSocket(port);

System.out.println("服务器创建成功");

while(true){

Socket client=ss.accept();

System.out.println("客户机连接");

ServerThread st=new ServerThread(client);

st.start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

服务器单个线程类:

package GroupChat;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.Socket;

/**

* 创建服务器线程类,该类继承自Thread

* @author Administrator

*

*/

public class ServerThread extends Thread{

private Socket client;//服务器连接对象

private OutputStream out;//输出流对象

private InputStream in;//输入流对象

public User use=new User();

/**

* 构造方法,传入该线程要处理的连接对象

* @param lient:要处理的连接对象

*/

public ServerThread(Socket client){

this.client=client;

}

/**

* 重写线程的Run方法

*/

public void run(){

//处理连接的方法

ProcessChat();

}

/**

* 处理连接的方法

*/

private void ProcessChat() {

try {

out=client.getOutputStream();//获得相应的输出流对象

in=client.getInputStream();//获得相应的输入流对象

BufferedReader br=new BufferedReader(new InputStreamReader(in));//实例化缓冲读取信息的对象

SendMsg("欢迎来到服务器\n请输入用户名:");

use.name=br.readLine();

SendMsg("请输入密码:");

use.pew=br.readLine();

boolean bool=DOT.Checkuse(use);//检验用户信息

if(!bool){

client.close();//如果检查不通过就关闭

return;

}

ChatTool.AddThread(this);//添加线程

use.logintime=System.currentTimeMillis();

use.adress=client.getRemoteSocketAddress().toString();

String str="";

str=br.readLine();

//当str为空时,也要退出。处理强行关闭客户机

while(!"bye".equals(str)&&str!=null){

System.out.println(use.name+":"+str);

ChatTool.SendAll(use, str);

str=br.readLine();

}

out.write(str.getBytes());

ChatTool.DeleThread(this);

client.close();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 向客户机发送信息的方法

* @param string:要发送的信息

*/

public void SendMsg(String str) {

str=str+"\r\n";

try {

out.write(str.getBytes());

out.flush();//强制输出

} catch (IOException e) {

e.printStackTrace();

}

}

}

用户验证类(预加载好了几个用户):

package GroupChat;

import java.util.HashMap;

import java.util.Map;

/**

* 创建验证用户信息的类,用来验证用户信息

* @author Administrator

*

*/

public class DOT {

private static Map map=new HashMap();

/**

* 创建验证用户信息的方法

* @param use:要验证的用户

* @return:是否成功

*/

public static boolean Checkuse(User use){

if(use.pew.equals(map.get(use.name))){

return true;//验证成功就返回True

}

return false;

}

static{

for(int i=0;i<5;i++){

User use=new User();

use.name="name"+i;

use.pew="pew"+i;

map.put(use.name,use.pew);//放入map中

}

}

}

存装静态方法:

package GroupChat;

import java.util.HashMap;

import java.util.Map;

/**

* 创建验证用户信息的类,用来验证用户信息

* @author Administrator

*

*/

public class DOT {

private static Map map=new HashMap();

/**

* 创建验证用户信息的方法

* @param use:要验证的用户

* @return:是否成功

*/

public static boolean Checkuse(User use){

if(use.pew.equals(map.get(use.name))){

return true;//验证成功就返回True

}

return false;

}

static{

for(int i=0;i<5;i++){

User use=new User();

use.name="name"+i;

use.pew="pew"+i;

map.put(use.name,use.pew);//放入map中

}

}

}

用户类:

package GroupChat;

/**

* 创建用户信息类,用来存放用户信息

* @author Administrator

*

*/

public class User {

public String name;//用户名字

public String pew;//用户密码

public long logintime;//用户的上线时间

public String adress;//用户的地址

}

java如何实现群聊,java的容易群聊实现相关推荐

  1. java网络程序设计 聊天室之私聊、群聊和清屏功能的实现

    TCP聊天室实现了私聊.群聊和清屏的功能,简陋的UI界面,一个服务器端,支持多个客户端之间的通信. 项目代码:https://pan.baidu.com/s/17iegRam4KnWvcWHw3mvp ...

  2. Java基础之《netty(18)—群聊系统》

    一.实例要求 1.编写一个netty群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) 2.实现多人群聊 3.服务器端:可以检测用户上线,离线,并实现消息转发功能 4.客户端:通过channe ...

  3. Java编程解密-Dubbo负载均衡与集群容错机制

    1 Dubbo简介 Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 作为一个轻量级RPC框架,Du ...

  4. [Java实战][仅需1步]企业微信群机器人[0基础接入]

    [仅需1步]企业微信群机器人[0基础接入][java] 背景 介绍 使用 测试 项目 背景 公司需要把日常的服务器错误抛到企业微信群中,我正好记录下使用企业微信群机器人- 介绍 企业微信群机器人 应用 ...

  5. 与Brian Goetz聊Java的数据类

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 作为Oracle的Java语言架构师,Brian Goetz一直致力于Java编程语言在生产 ...

  6. Memcached 集群环境Java客户端

    Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...

  7. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  8. 蚁群算法画图java_[转载]简单蚁群算法 + JAVA实现蚁群算法

    一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...

  9. 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法

    一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...

  10. tsp java_蚁群算法java实现以及TSP问题蚁群算法求解

    1. 蚁群算法简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题 ...

最新文章

  1. oracle中的备注的配置与查询
  2. 程序员面试系列——单链表的反转
  3. mysql练习数据_数据分析学习第一关-入门
  4. word2vec原理浅析
  5. [BZOJ2502]清理雪道解题报告|带下界的最小流
  6. 【Boost】boost库中thread多线程详解13——线程标识符
  7. 软件工程(总体设计②设计原理)
  8. linux和信息资源管理,Linux top命令详解
  9. mysql 性能调优 参数随写
  10. matlab画图(plot)命令。长期更新!
  11. K3 工业单据的对应相关表作用
  12. Mac m1芯片 安装 mosek python
  13. iphone/ipad 连接smb服务器,备份照片
  14. UVA - 10827 Maximum sum on a torus(dp最大子矩阵和)
  15. 第十五篇,man手册
  16. Matplot X轴,Y轴最大值限定(固定X轴、Y轴的范围)
  17. 个人Tomcat复习篇
  18. 无限级分类之迭代查找家谱树
  19. 美国的工会制度——Google成立工会背后
  20. 计算机报录比10:1,中国石油大学(华东)比去年大幅增加!

热门文章

  1. mybatis学习(2)
  2. 迷宫问题(八方向)c++
  3. 利用科赫雪花绘制方块雪花
  4. python中的消息弹窗
  5. 魔兽奥尔加隆服务器怎么找不到,魔兽世界观察者奥尔加隆攻略 奥尔加隆怎么打...
  6. 使用mui开发的抖音、快手互赞互粉的分享类app
  7. PHP三元(三目)运算符
  8. 用doctype激活浏览器模式
  9. spring事务注解@Transactional不生效、不回滚原因
  10. 漫画 | 程序员,你得学会“见人说人话,见鬼说鬼话”