java如何实现群聊,java的容易群聊实现
服务器总类:
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的容易群聊实现相关推荐
- java网络程序设计 聊天室之私聊、群聊和清屏功能的实现
TCP聊天室实现了私聊.群聊和清屏的功能,简陋的UI界面,一个服务器端,支持多个客户端之间的通信. 项目代码:https://pan.baidu.com/s/17iegRam4KnWvcWHw3mvp ...
- Java基础之《netty(18)—群聊系统》
一.实例要求 1.编写一个netty群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) 2.实现多人群聊 3.服务器端:可以检测用户上线,离线,并实现消息转发功能 4.客户端:通过channe ...
- Java编程解密-Dubbo负载均衡与集群容错机制
1 Dubbo简介 Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 作为一个轻量级RPC框架,Du ...
- [Java实战][仅需1步]企业微信群机器人[0基础接入]
[仅需1步]企业微信群机器人[0基础接入][java] 背景 介绍 使用 测试 项目 背景 公司需要把日常的服务器错误抛到企业微信群中,我正好记录下使用企业微信群机器人- 介绍 企业微信群机器人 应用 ...
- 与Brian Goetz聊Java的数据类
\ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 作为Oracle的Java语言架构师,Brian Goetz一直致力于Java编程语言在生产 ...
- Memcached 集群环境Java客户端
Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...
- 蚁群算法画图java_[转载]简单蚁群算法 + JAVA实现蚁群算法
一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...
- 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法
一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...
- tsp java_蚁群算法java实现以及TSP问题蚁群算法求解
1. 蚁群算法简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题 ...
最新文章
- oracle中的备注的配置与查询
- 程序员面试系列——单链表的反转
- mysql练习数据_数据分析学习第一关-入门
- word2vec原理浅析
- [BZOJ2502]清理雪道解题报告|带下界的最小流
- 【Boost】boost库中thread多线程详解13——线程标识符
- 软件工程(总体设计②设计原理)
- linux和信息资源管理,Linux top命令详解
- mysql 性能调优 参数随写
- matlab画图(plot)命令。长期更新!
- K3 工业单据的对应相关表作用
- Mac m1芯片 安装 mosek python
- iphone/ipad 连接smb服务器,备份照片
- UVA - 10827 Maximum sum on a torus(dp最大子矩阵和)
- 第十五篇,man手册
- Matplot X轴,Y轴最大值限定(固定X轴、Y轴的范围)
- 个人Tomcat复习篇
- 无限级分类之迭代查找家谱树
- 美国的工会制度——Google成立工会背后
- 计算机报录比10:1,中国石油大学(华东)比去年大幅增加!