`
ycyxb104
  • 浏览: 26668 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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 List<ChatThread> stList=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<stList.size();i++){
		ChatThread st=stList.get(i);
		//ChatThread类中定义有一个将消息发送出去的方法
		st.sendMsgToMe(msg);//发消息给每一个客户机
		}
	}
	}

 

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.Map<String, UserInfo> userDB=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;
	}
}

 

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

分享到:
评论

相关推荐

    java聊天室(绝对经典)

    "java聊天室(绝对经典)"这个项目包含了三种不同风格的聊天室实现,每种都有其独特的编程思想和效果。通过学习这些示例,你可以增强自己的Java编程技能,并理解如何构建实时通信系统。 首先,我们要了解Java聊天室...

    Java聊天室_javasocket_java聊天_聊天室_

    Java聊天室是一个基于Java Socket编程实现的交互式通信应用,主要功能包括用户登录、私人聊天、群组聊天、发送图片以及发送抖动等。这个项目不仅涵盖了基础的网络编程概念,还涉及到图形用户界面(GUI)的设计,为...

    java聊天室源码,java聊天室下载

    Java聊天室源码是学习和理解网络编程及多线程技术的理想实践项目。在这个项目中,我们主要关注两个核心文件:`TestServer.java`和`TestClient.java`,它们分别代表了聊天室的服务器端和客户端。 首先,让我们深入...

    java聊天室,聊天室

    【Java聊天室】是一个基于Java编程语言开发的实时通信应用,它使用了AWT(Abstract Window Toolkit)库来构建用户界面,并通过多线程技术实现并发处理,支持多人群聊功能。这个项目对于初学者来说,是理解Java编程、...

    基于java聊天室(gui)

    【Java聊天室(GUI)详解】 Java是一种广泛使用的面向对象的编程语言,因其跨平台的特性而备受青睐。在这个项目中,“基于Java聊天室(GUI)”是一个利用Java的图形用户界面(GUI)技术实现的在线聊天应用。GUI是...

    java聊天室.

    Java聊天室是一个基于Java技术实现的多人实时通信系统,它允许用户通过网络进行文本、音频或视频交流。在本文中,我们将深入探讨Java聊天室的关键技术和实现细节。 首先,Java聊天室的核心是网络编程,主要涉及到...

    Java聊天室(界面完整,群聊,私聊,用户列表)

    Java聊天室是一个基于Java编程语言实现的实时通讯应用,它具备完整的用户界面,支持群聊和私聊功能,并且能够显示在线用户列表。这个项目利用了Socket编程来实现实时的数据传输,为用户提供了一个交互性强、功能丰富...

    java聊天室系统相当经典的聊天室

    Java聊天室系统是一种基于C/S(Client/Server)模式的多用户交互平台,它允许用户在不同的计算机上进行实时通信。这个系统具有丰富的功能,包括群聊、私聊、清屏、显示时钟、设置字体颜色、使用表情、聊天室管理(如...

    Java聊天室客户端

    【Java聊天室客户端】是一个基于Java技术开发的实时通信应用,它允许用户通过网络进行文本聊天。这个项目的核心目标是创建一个用户友好的界面,提供登录功能以及一个互动的聊天平台。下面将详细介绍该客户端的一些...

    Java聊天室项目

    【Java聊天室项目】是一个基于Java技术实现的实时通信应用,旨在帮助学习者理解网络编程、多线程以及用户交互等核心概念。本项目通过一系列的视频教程,逐步引导学习者构建一个完整的在线聊天室系统,使用户可以进行...

    JAVA聊天室完整代码

    Java聊天室是一个典型的网络编程项目,它涉及到许多关键的Java技术,特别适合初学者学习和实践。在这个项目中,我们将探讨以下知识点: 1. **Java网络编程基础**:Java提供了丰富的API来支持网络编程,包括Socket和...

    Java聊天室程序

    Java聊天室程序是一种基于Java技术实现的网络通信应用,它为用户提供了一个互动交流的平台,具备多种特性以满足用户的基本聊天需求。在这个程序中,开发者利用了Java的强大网络编程能力,构建了一个稳定、高效的聊天...

    eclipse java聊天室

    《Eclipse Java聊天室》项目概述 在计算机科学领域,尤其是软件开发中,实时通信功能是许多应用程序不可或缺的一部分。这个“Eclipse Java聊天室”项目就是这样一个实例,它利用Java编程语言实现了一个基本的在线...

    JAVA聊天 室小代码

    【JAVA聊天室小代码】是基于Java编程语言实现的一个简易聊天室项目,它提供了一个基本的平台,使得用户可以通过网络进行实时的文本交流。在Java编程中,实现这样的功能涉及到了许多关键知识点,包括网络编程、多线程...

    Java聊天室程序源码(毕业设计) Build 20090521

    Java聊天室程序是一种基于Java编程语言开发的在线实时通信应用,通常用于多人之间的文本、音频或视频交流。这个源码项目是为毕业设计而构建的,版本为Build 20090521,意味着它可能在2009年5月21日完成并打包。下面...

    java聊天室服务器

    Java聊天室服务器是一种基于Java编程语言实现的网络通信应用,主要功能是允许多个用户通过互联网进行实时的文字或语音交流。这个项目对于Java初学者来说是一个很好的实践机会,能够帮助他们理解网络编程、多线程以及...

    Java聊天室程序(功能齐全)

    Java聊天室程序是一种基于Java技术实现的实时通讯应用,它具备了聊天室聊天、私聊以及服务器监控等多种功能,充分体现了Java在开发此类系统时的强大性能和灵活性。在这个项目中,我们将深入探讨Java聊天室程序的关键...

    java聊天室,利用线程池实现多用户聊天室

    总的来说,创建一个Java聊天室涉及了Java的网络编程、多线程、并发控制、数据序列化、安全性以及GUI设计等多个知识点。利用线程池来处理并发请求,可以提高系统的响应速度和稳定性,实现高效、安全的多用户聊天环境...

    聊天室x_socket聊天室_java线程_聊天室_stuchatroom_ideajava聊天室_

    在这个“聊天室x_socket聊天室_java线程_聊天室_stuchatroom_ideajava聊天室_”项目中,开发者利用了Java的Socket库来创建一个简单的多人聊天室。这个聊天室不仅展示了Socket通信的基本原理,还引入了多线程技术来...

    java聊天室源码

    【Java聊天室源码解析】 Java聊天室源码是一个典型的多用户实时通信系统,它基于Java编程语言,展示了网络编程、并发处理以及IO流等核心Java技术的应用。在这个项目中,用户可以实现实时的文字交流,是学习和理解...

Global site tag (gtag.js) - Google Analytics