通过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 Socket编程实现的交互式通信应用,主要功能包括用户登录、私人聊天、群组聊天、发送图片以及发送抖动等。这个项目不仅涵盖了基础的网络编程概念,还涉及到图形用户界面(GUI)的设计,为...
Java聊天室源码是学习和理解网络编程及多线程技术的理想实践项目。在这个项目中,我们主要关注两个核心文件:`TestServer.java`和`TestClient.java`,它们分别代表了聊天室的服务器端和客户端。 首先,让我们深入...
【Java聊天室】是一个基于Java编程语言开发的实时通信应用,它使用了AWT(Abstract Window Toolkit)库来构建用户界面,并通过多线程技术实现并发处理,支持多人群聊功能。这个项目对于初学者来说,是理解Java编程、...
【Java聊天室(GUI)详解】 Java是一种广泛使用的面向对象的编程语言,因其跨平台的特性而备受青睐。在这个项目中,“基于Java聊天室(GUI)”是一个利用Java的图形用户界面(GUI)技术实现的在线聊天应用。GUI是...
Java聊天室是一个基于Java技术实现的多人实时通信系统,它允许用户通过网络进行文本、音频或视频交流。在本文中,我们将深入探讨Java聊天室的关键技术和实现细节。 首先,Java聊天室的核心是网络编程,主要涉及到...
Java聊天室是一个基于Java编程语言实现的实时通讯应用,它具备完整的用户界面,支持群聊和私聊功能,并且能够显示在线用户列表。这个项目利用了Socket编程来实现实时的数据传输,为用户提供了一个交互性强、功能丰富...
Java聊天室系统是一种基于C/S(Client/Server)模式的多用户交互平台,它允许用户在不同的计算机上进行实时通信。这个系统具有丰富的功能,包括群聊、私聊、清屏、显示时钟、设置字体颜色、使用表情、聊天室管理(如...
【Java聊天室客户端】是一个基于Java技术开发的实时通信应用,它允许用户通过网络进行文本聊天。这个项目的核心目标是创建一个用户友好的界面,提供登录功能以及一个互动的聊天平台。下面将详细介绍该客户端的一些...
【Java聊天室项目】是一个基于Java技术实现的实时通信应用,旨在帮助学习者理解网络编程、多线程以及用户交互等核心概念。本项目通过一系列的视频教程,逐步引导学习者构建一个完整的在线聊天室系统,使用户可以进行...
Java聊天室是一个典型的网络编程项目,它涉及到许多关键的Java技术,特别适合初学者学习和实践。在这个项目中,我们将探讨以下知识点: 1. **Java网络编程基础**:Java提供了丰富的API来支持网络编程,包括Socket和...
Java聊天室程序是一种基于Java技术实现的网络通信应用,它为用户提供了一个互动交流的平台,具备多种特性以满足用户的基本聊天需求。在这个程序中,开发者利用了Java的强大网络编程能力,构建了一个稳定、高效的聊天...
《Eclipse Java聊天室》项目概述 在计算机科学领域,尤其是软件开发中,实时通信功能是许多应用程序不可或缺的一部分。这个“Eclipse Java聊天室”项目就是这样一个实例,它利用Java编程语言实现了一个基本的在线...
【JAVA聊天室小代码】是基于Java编程语言实现的一个简易聊天室项目,它提供了一个基本的平台,使得用户可以通过网络进行实时的文本交流。在Java编程中,实现这样的功能涉及到了许多关键知识点,包括网络编程、多线程...
Java聊天室程序是一种基于Java编程语言开发的在线实时通信应用,通常用于多人之间的文本、音频或视频交流。这个源码项目是为毕业设计而构建的,版本为Build 20090521,意味着它可能在2009年5月21日完成并打包。下面...
Java聊天室服务器是一种基于Java编程语言实现的网络通信应用,主要功能是允许多个用户通过互联网进行实时的文字或语音交流。这个项目对于Java初学者来说是一个很好的实践机会,能够帮助他们理解网络编程、多线程以及...
Java聊天室程序是一种基于Java技术实现的实时通讯应用,它具备了聊天室聊天、私聊以及服务器监控等多种功能,充分体现了Java在开发此类系统时的强大性能和灵活性。在这个项目中,我们将深入探讨Java聊天室程序的关键...
总的来说,创建一个Java聊天室涉及了Java的网络编程、多线程、并发控制、数据序列化、安全性以及GUI设计等多个知识点。利用线程池来处理并发请求,可以提高系统的响应速度和稳定性,实现高效、安全的多用户聊天环境...
在这个“聊天室x_socket聊天室_java线程_聊天室_stuchatroom_ideajava聊天室_”项目中,开发者利用了Java的Socket库来创建一个简单的多人聊天室。这个聊天室不仅展示了Socket通信的基本原理,还引入了多线程技术来...
【Java聊天室源码解析】 Java聊天室源码是一个典型的多用户实时通信系统,它基于Java编程语言,展示了网络编程、并发处理以及IO流等核心Java技术的应用。在这个项目中,用户可以实现实时的文字交流,是学习和理解...