java聊天室更改_java聊天室的创建

通过java建立一个简单的聊天室,可以实现多个客户端的通信:

一共分为五个类:

ChatServer类:建立一个服务器并让服务器处于等待状态

package 服务器v1.a0;

import java.net.ServerSocket;

import java.net.Socket;

public class ChatServer{

public void SetUpServer(int port){

try {

//建立绑定在指定端口上的服务器对象

ServerSocket server= new ServerSocket(port);

System.out.println("服务器运行成功"+port);

//让服务器始终处于等待状态:阻塞状态

while(true){

Socket client=server.accept();

//进行多线程任务使服务器同时接受多客户端信息

ChatThread ct = new ChatThread(client);

ct.start();

}

}catch(Exception ef){

ef.printStackTrace();

}

}

public static void main(String[] args){

ChatServer ct=new ChatServer();

ct.SetUpServer(9090);

}

}

ChatThread类:可以验证用户,通过多线程实现多客户端之间的通信,并实现字符串的输入

package 服务器v1.a0;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.Socket;

public class ChatThread extends Thread{

private Socket client;

private UserInfo user;

private OutputStream out;

public UserInfo getOwerUser(){

return user;

}

public ChatThread(Socket client){

this.client = client;

}

public void sendMsgToMe(String msg){

try{

msg+="\r\n";

out.write(msg.getBytes());//用输出对象发送数据 //取得组成这个字符串的字节

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

}catch(Exception ef){

}

}

public void run(){

try {

//从连接对象上得到输入流对象

out = client.getOutputStream();

InputStream in=client.getInputStream();

String s="欢迎来javaKe.com\r\n";

BufferedReader brd=new BufferedReader(new InputStreamReader(in));

sendMsgToMe("欢迎你来聊天!请输入你的用户名:");

String userName=brd.readLine();

sendMsgToMe(userName+",请输入你的密码:");

String pwd=brd.readLine();

user=new UserInfo();

user.setName(userName);

user.setPwd(pwd);

//System.out.println("user的名字"+user.getName());

//System.out.println("user的密码"+user.getPwd());

System.out.println(user);

boolean loginState=DaoTools.checkLogin(user);

if(!loginState){//不存在这个用户账号则关闭

client.close();

return ;

}

ChatTools.addClient(this);

String inputs=brd.readLine();

while(!inputs.equals("#")){//当遇到‘#’时关闭与客户端的连接

System.out.println("客户端发过来的消息是"+inputs);

s="服务器收到"+inputs+"\r\n";

ChatTools.castMsg(this.user, inputs);

inputs= brd.readLine();//读取下一条

}

sendMsgToMe(s);

client.close();

} catch (Exception e) {

e.printStackTrace();

}

}

//创建一个字符串缓冲区

private String readString(InputStream in) throws Exception{

StringBuffer stb=new StringBuffer();

char c=0;

while(c!=10){

//遇到一个换行,就是一句话

int i=in.read();//读取客户机发来的一个字节

c=(char)i;//将输入的字节转换成char型

stb.append(c);//将读到的一个字符加到字符串缓冲区中

}

//将读到的字符串转为字符串,并调用trim去掉尾部的空格

String inputs=stb.toString().trim();

return inputs;

}

}

ChatTools类:实现发送消息的方法

package 服务器v1.a0;

import java.util.List;

import java.util.ArrayList;

public class ChatTools {

private static ListstList=new ArrayList();

public static void addClient(ChatThread ct){

//通知己在线用户,有人上线了:

castMsg(ct.getOwerUser(),"我上线啦!目前人数"+stList.size());

stList.add(ct);//将这个处理线程对象加入到队列中

}

public static void castMsg(UserInfo sender,String msg){

msg=sender.getName()+"说:"+msg;

for(int i=0;i

DaoTools类:实现验证用户的方法

package 服务器v1.a0;

import java.util.HashMap;

public class DaoTools {

/**

* 查看这个用户是否可以登录成功!

* @param user :要检查的用户对象

* @return:是否登录成功

*/

public static boolean checkLogin(UserInfo user){

//在此只验证用户名是否存在

if(userDB.containsKey(user.getName())){

return true;

}

System.out.println("认证失败!: "+user.getName());

return false;

}

//内存用户信息数据库

private static java.util.MapuserDB=new HashMap();

//静态块:模拟生成内存中的用户数据,用户名为user1~10

//当程序启动时,这段代码(静态块中的)会自动执行,向userDB中存放数据

static{

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

UserInfo user=new UserInfo();

user.setName("user"+i);

System.out.println("输完用户名"+i);

user.setPwd("pwd"+i);

System.out.println("输完密码"+i);

userDB.put(user.getName(), user);

}

}

}

UserInfo类:保存用户信息

package 服务器v1.a0;

public class UserInfo {

private String name;//用户名

private String pwd;//密码

private String logictime;//登陆时间

private String address;//登陆地址

public void setName(String name){

this.name=name;

}

public String getName(){

return name;

}

public void setPwd(String pwd){

this.pwd=pwd;

}

public String getPwd(){

return pwd;

}

public void setLogicTime(String logictime){

this.logictime=logictime;

}

public String getLogicTime(){

return logictime;

}

public void setAddress(String address){

this.address=address;

}

public String getAddress(){

return address;

}

}

初步了解通信之后写的一个简单的聊天室,功能还不太完善,之后会实现客户端,以及中文输入的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值