java实现聊天室功能(包含全部代码,有界面)
初级前端开发实训实现一个简单的聊天室功能
初级前端开发实训实现一个简单的聊天室功能一、简介在本次的初级前端开发实训中,我们将着手实现一个简单的聊天室功能。
聊天室是一种实时通信的应用程序,用户可以通过聊天室与其他用户进行文字交流。
我们将使用前端开发技术来搭建界面,并结合后端技术来实现聊天功能。
二、项目准备实现聊天室功能需要以下准备工作:1. 下载并安装Node.js:Node.js是一个基于Chrome V8引擎的JavaScript运行环境,我们将使用它来实现后端的逻辑。
2. 安装Express框架:Express是Node.js的一个快速、开放、极简的web应用框架,我们将使用它来搭建服务器。
3. 创建项目文件夹:在本地计算机上创建一个文件夹,命名为ChatRoom,用于存放项目文件。
三、搭建前端界面1. 创建HTML文件:在ChatRoom文件夹中创建一个名为index.html的文件,这将作为前端界面的入口文件。
2. 编写HTML代码:根据聊天室的需求,设计并编写HTML代码,包括聊天显示区域、输入框、发送按钮等元素。
3. 使用CSS美化界面:在HTML文件中引入CSS文件,并根据需求编写样式,使得聊天室界面整洁美观。
四、实现前后端交互1. 创建服务器:在ChatRoom文件夹中创建一个名为server.js的文件,用于处理前后端之间的数据传输。
2. 使用Express框架:在server.js文件中引入Express框架,并设置服务器的监听端口。
3. 处理前端请求:编写服务器端代码,当接收到前端的请求时,根据请求的内容做出相应的处理。
4. 实现聊天功能:服务器端接收到用户发送的聊天消息后,将其广播给所有在线用户,实现实时的聊天功能。
五、项目测试1. 启动服务器:在终端中进入ChatRoom文件夹,并运行server.js 文件,启动服务器。
2. 打开浏览器:在浏览器中访问localhost:port(port为设置的监听端口),打开聊天室界面。
多人聊天室编码项目摘要
多人聊天室编码项目摘要项目摘要有:一、设计内容利用java语言实现聊天室程序。
聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需登录到服务器端才可以实现正常的聊天功能。
设计的聊天室能实现用户登录,显示登录用户列表,以及发送聊天信息和显示聊天信息的功能。
并可以选择接收信息的用户进行单发或群发的功能,运行程序,登录服务器后,可以从列表中选择单个或多个用户进行聊天,它是图形界面,线程,流与文件系统等技术的综合应用。
二、实现功能1、启动服务器端,接收客户端发来的信息,并在服务器端窗体显示客户端聊天信息,再吧信息返给在线用户。
2、启动客户端,进入客户端页面,输入用户名,点击登录按钮,在显示在线用户列表内显示用户名。
3、发送编辑框输入发送内容,单击发送按钮,启动输出流,把信息发送出去,同时把发出的信息追加到聊天内容文本域内,显示用户名,时间和发送内容。
4、聊天信息文本域,在线用户显示域和发送信息的文本域加了滚动条,其中聊天信息文本域,发送信息的文本域的文字能自动换行。
5、别的客户端发来信息是通过输入流读取信息,并截取发来信息的用户名及信息,用户名加到在线用户列表上显示在线,信息追加到聊天内容文本域内,显示用户名,时间和发送内容。
三、开发环境选择1、就执行平台而言,必须考虑的问题之一是用户可能使用的操作系统。
用户可能使用的是Windows Linux。
JAVA语言具有平台无关性,可以不需要任何修改就可以运行在支持JAVA的任何计算机上。
2、JAVA的Swing 组件开发技术可以开发丰富的图形界面,并且Swing API 类提供了丰富的外部接口和方法,可以方便实现系统功能。
3、就项目开发而言,纯粹的面向对象,加上数量巨大的类所提供的方法(函数)库的支持,使得利用Java开发各种应用程序,可以说是易如反掌。
此外,在程序除错、修改、升级和增加新功能等方面,因其面向对象的特性,使得这些维护也变得非常容易。
java聊天室部分主要代码
ChatClient.javaimport java.awt.*;import java.io.*;import .*;import java.applet.*;import java.util.Hashtable;public class ChatClient extends Applet implements Runnable{ Socket socket=null;DataInputStream in=null;//读取服务器端发来的消息DataOutputStream out=null;//向服务器端发送的消息InputInfo 用户名提交界面=null;UserChat 聊天界面=null;Hashtable listTable;//用于存放在线用户的用户名的散列表Label 提示条;Panel north,center;Thread thread;public void init(){setSize(1000,800);int width=getSize().width;int height=getSize().height;listTable=new Hashtable();setLayout(new BorderLayout());用户名提交界面=new InputInfo(listTable);int h=用户名提交界面.getSize().height;聊天界面=new UserChat("",listTable,width,height-(h+5));聊天界面.setVisible(false);提示条=new Label("正在连接到服务器...",Label.CENTER);提示条.setForeground(Color.red);north=new Panel(new FlowLayout(FlowLayout.LEFT));center=new Panel();north.add(用户名提交界面);north.add(提示条);center.add(聊天界面);add(north,BorderLayout.NORTH);add(center,BorderLayout.CENTER);validate();}public void start(){if(socket!=null&&in!=null&&out!=null){try{socket.close();in.close();out.close();聊天界面.setVisible(false);}catch(Exception ee){}}try{socket=new Socket(this.getCodeBase().getHost(),6666);in=new DataInputStream(socket.getInputStream());out=new DataOutputStream(socket.getOutputStream());}catch(IOException ee){提示条.setText("连接失败");}//客户端成功连接服务器端if(socket!=null){InetAddress address=socket.getInetAddress();提示条.setText("连接:"+address+"成功");用户名提交界面.setSocketConnection(socket,in,out);north.validate();}if(thread==null){thread=new Thread(this);thread.start();}}public void stop(){try{socket.close();thread=null;}catch(IOException e){this.showStatus(e.toString());}}public void run(){while(thread!=null){if(用户名提交界面.getchatornot()==true){聊天界面.setVisible(true);聊天界面.setName(用户名提交界面.getName());聊天界面.setSocketConnection(socket,in,out);提示条.setText("祝聊天快乐!");center.validate();break;}try{Thread.sleep(100);}catch(Exception e){}}}}ChatMain.javaimport .*;import java.util.*;public class ChatMain {public static void main(String args[]) {ServerSocket server=null;Socket you=null;Hashtable peopleList;peopleList=new Hashtable();while(true){try{//服务器端在端口6666处监听来自客户端的信息server=new ServerSocket(6666);}catch(IOException e1){System.out.println("正在监听");}try{//当服务器端接收到客户端的消息后,取得客户端的IP地址。
局域网聊天程序客户端代码+详解
import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event.*;//引入包。
public class ChatClient {public static void main(String[] args) {ChatClient cc = new ChatClient();cc.receive();}JTextField jtf; // 文本条JTextArea jta; //文本域。
Socket s; //客户端PrintWriter out; //输出流BufferedReader in; //输入流public ChatClient() {JFrame frame = new JFrame("ChatClient");//窗口frame.setSize(400, 300); //大小jta = new JTextArea(); //文本域jta.setEditable(false); //不可编辑jtf = new JTextField();//文件条jtf.addActionListener(new ActionListener() { //添加监听。
public void actionPerformed(ActionEvent arg0) {send(); //调用send()方法}});frame.getContentPane().add(new JScrollPane(jta)); //添加滚动条frame.getContentPane().add(jtf, "South"); //添加文本条frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口。
frame.setVisible(true); //可显示的。
JAVA结合WebSocket实现简单客服聊天功能
JAVA结合WebSocket实现简单客服聊天功能说明:该⽰例只简单的实现了客服聊天功能。
1、聊天记录没有保存到数据库中,⼀旦服务重启,消息记录将会没有,如果需要保存到数据库中,可以扩展2、页⾯样式⽤的⽹上模板,样式可以⾃⼰进⾏修改3、只能由⽤户主要发起会话,管理员⽆法主动进⾏对话4、页⾯之间跳转代码没有包含在⾥⾯,请⾃⼰书写,在管理员消息列表页中,需要把该咨询的⽤户ID带到客服回复页⾯中5、${websocket_url} 这个为项⽬的URL地址效果截图:客服回复页⾯(member_admin_chat.html)管理员消息列表页(member_admin_chat_list.html)⽤户咨询页⾯(member_chat.html)代码:页⾯所需要⽤到的基础样式、图⽚,下载链接:(这个只是⾃⼰⽹上下载的样式demo,可以根据⾃⼰的来)pom.xml <dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>8.0</version><scope>provided</scope></dependency>或者jar包javax.websocket-api-1.0.jar下载地址:配置类WebSocketConfig.javapackage com.config;import javax.websocket.Endpoint;import javax.websocket.server.ServerApplicationConfig;import javax.websocket.server.ServerEndpointConfig;import java.util.Set;public class WebSocketConfig implements ServerApplicationConfig {@Overridepublic Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> endpointClasses) { return null;}@Overridepublic Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {//在这⾥会把含有@ServerEndpoint注解的类扫描加载进来,可以在这⾥做过滤等操作return scanned;}}消息DTO类(使⽤了lombok,这⾥不在多做说明)ChatDTO.javapackage com.websocket.dto;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.experimental.Accessors;/*** @author 。
Java课程设计聊天室(含代码)
Java程序课程设计任务书JAVA聊天室的系统的设计与开发1.主要内容:用JAVA实现基于C/S模式的聊天室系统。
聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。
2.具体要求(包括技术要求等):系统的功能要求:A.服务器端主要功能如下:1.在特定端口上进行侦听,等待客户端连接。
2.用户可以配置服务器端的侦听端口,默认端口为8888。
3.向已经连接到服务器端的用户发送系统消息。
4.统计在线人数。
5.当停止服务时,断开所有的用户连接。
B.客户端的主要功能如下:1.连接到已经开启聊天服务的服务器端。
2.用户可以配置要连接的服务器端的IP地址和端口号。
3.用户可以配置连接后显示的用户名。
4.当服务器端开启的话,用户可以随时登录和注销。
5.用户可以向所有人或某一个人发送消息。
学习并掌握一下技术:Java JavaBean 等熟练使用一下开发工具:Eclipse, JCreator 等实现系统上诉的功能。
3.进度安排:12月28日 ~ 12月29日:课程设计选题,查找参考资料12月30日 ~ 1月1日:完成系统设计1月2日 ~ 1月5日:完成程序代码的编写1月6日:系统测试与完善1月7日:完成课程设计报告,准备答辩4.主要参考文献:[1].张广彬孟红蕊张永宝.Java课程设计(案例精编)[M].清华大学出版社.2007年版摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。
基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。
一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。
Java聊天室的设计与实现毕业设计论文
毕业设计说明书Java聊天室系统的设计与实现2017 年 5 月 17日Java网络聊天室系统的设计与实现摘要:计算机从出现到现在有了飞速的发展,现阶段的计算机已经不单单是用于进行运算的独立的个体了,跟随计算机一同发展的还有互联网技术,经过了长久的发展,互联网技术有了日新月异的发展,它的发展速度和计算机的发展速度一样的恐怖,从出现一直到现在,它已经在人们的生活的各个方面发挥着自己的作用,而且是不可替代的作用。
因为计算机发展到现在已经成为一种廉价的生活物品,可以预想到未来人们都会使用计算机,上网的人也会逐渐增多,会有不断的人完善和更新出更好更棒的互联网服务,来提高自己的生活水平。
我国近几年经济和社会在不断的发展,互联网也得到了广大的支持,网络更是已经融入了广大人民的日常生活。
在计算机编程方面,互联网软件开发逐步转向以java为首的面向对象的编程技术,传统的面向过程的编程技术已经逐渐退出了历史的舞台,java正以不可思议的速度发展。
人们日常的生活,教育,网银,网购,面对面的网上视频,以及现在逐渐被大众接受的网络游戏都在使用面向对象的技术。
而且java自身的优势以及特点能够真正减少了企业的开发成本和开发人员的开发时间和难度。
在以前,人们获取信息的方式十分单一,通过电视,广播,信件以及人们的口头相传,这种方式效率十分的底下,得到的信息也很局限。
现阶段上网查找成为人们获取信息的主要途径,它具有快速,方便,以及传递的特点。
所以人们对网上的即时面对面聊天产生了需要。
一个界面清新,简单,并且高效的网络聊天室一定会受到大众的喜爱。
为了这个目的,构建此聊天系统。
本文将介绍网络聊天室程序的设计与完成。
关键词:网络聊天室;Java;客户机/服务器;Socket;Java chat room system design and implementation Abstract:With the development of Internet technology, network technology is developing very fast in the area of computer technology, one of emerged from it until now, it in many aspects, such as politics, economy, life play an irreplaceable role. With the growing popularity of the computer and popularization, the future will be more and more people use the Internet, enjoy the constantly update and improve the network services, to improve the level of their work lives. With the development of our economy and the popularization of the Internet, the Internet technology is also used more in the daily life of people. In application development and process oriented programming technology is gradually replaced by object-oriented programming technology, the computer software design and development has become the dominant, especially in the development of network technology, the object-oriented Java language programming is development rapidly in explosive. Remote education, online banking, shopping online, video online, and online games are all using object-oriented Java technology. And Java portable features enable Java programs to be compiled into bytecode that is not relevant to the platform, which enables Java programs to run on machines with Java interpreters. It really reduces the development cost of the enterprise and the development time and difficulty of the developer.In today's society, people's lives have long been inseparable from the Internet. In the future, the life and work of society will depend more on the development of digital technology, more and more networked, digital, electronic and virtualized. E-commerce is also becoming more and more relevant with the development of the Internet and people's life. The use of the development of the Internet and the current situation and development trend, can believe network technology step by step change our work and lifestyle, and social values will all change of step by step.In today's rapid development of network, the query on the Internet become people to quickly get published, and transfer information important channel, it in many aspects, such as people, political economy, life play an important role. Traditional letter-writing methods do not satisfy people's immediate demand for information. Thus, can chat face to face on the Internet become important human needs, a popular chat tools should be: interface and pure and fresh, simple operation, humanity, saving system resources. For this purpose, build the chat system.This paper completes the development of an online chat room program through Java's sockets. This article introduces the design and completion of network chat room program.Key words:chat rooms; the Java; Client / Server;the Socket;目录摘要 (I)Abstract ................................................ 错误!未定义书签。
基于JAVA的多人聊天室的系统设计
一、系统设计
1、用户界面设计
1、用户界面设计
聊天室的用户界面设计应遵循简单、直观、易用的原则。在聊天室中,用户 可以通过文本、语音、文件传输等多种方式进行交流。因此,界面设计中应包括 聊天窗口、语音聊天窗口、文件传输窗口等功能。
2、代码实现和优化
2、代码实现和优化
聊天室的代码实现应采用模块化的设计思想,将不同的功能模块进行分离, 以便于维护和扩展。在代码优化方面,应采用多线程技术,提高系统的并发性能 和稳定性。同时,应注意代码的健壮性和安全性,防止恶意攻击和数据泄露。
三、技术选型
1、系统架构
1、系统架构
本系统采用C/S架构,由客户端和服务器端两部分组成。客户端负责用户界面 的展示和用户数据的发送,服务器端负责用户注册登录的验证、聊天记录的存储 和管理、以及语音和文件传输等功能。
2、开发工具与技术方案
2、开发工具与技术方案
本系统开发使用JAVA语言,采用Eclipse作为开发工具。在技术方案上,我 们采用了多线程技术实现并发处理,使用Socket进行网络通信,同时采用了 JavaFX和Swing等前端技术进行界面设计。
2、常见问题与解决方法
2、常见问题与解决方法
在测试过程中,我们遇到了一些问题,如网络延迟、掉线、卡顿等现象。针 对这些问题,我们采用了如下解决方法:采用心跳检测机制来检测掉线和卡顿现 象;通过缓存技术来减少网络传输次数;优化代码算法来提高程序响应速度。
3、系统维护与改进
3、系统维护与改进
为了保证系统的稳定性和安全性,我们需要对系统进行日常维护和升级。具 体工作包括:定期备份数据、更新安全补丁、优化系统性能等。同时,我们将持 续收集用户的反馈意见和建议,以便对系统进行改进和优化。
JAVA聊天程序设计代码及报告
JAVA聊天程序设计代码及报告import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.Scanner;public class ChatClientpublic static void main(String[] args)final String HOST_NAME = "localhost";final int PORT_NUMBER = 1234;trySocket socket = new Socket(HOST_NAME, PORT_NUMBER);System.out.println("Connected to chat server!");BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream());PrintWriter writer = new PrintWriter(socket.getOutputStream(, true);// read user input in a separate threadThread inputThread = new Thread(( ->Scanner scanner = new Scanner(System.in);while (true)String userInput = scanner.nextLine(;writer.println(userInput);}});inputThread.start(;// continuously read server responsesString serverResponse;while ((serverResponse = reader.readLine() != null)System.out.println("Server: " + serverResponse);}} catch (Exception e)System.out.println("Error: " + e.getMessage();}}该聊天程序是一个基于TCP协议的客户端程序,使用了Java Socket 进行通信。
java websocket案例
java websocket案例摘要:1.Java WebSocket 简介2.WebSocket 案例一:聊天室3.WebSocket 案例二:在线投票4.WebSocket 案例三:实时股票信息5.总结正文:1.Java WebSocket 简介Java WebSocket 是一种在单个TCP 连接上进行全双工通信的协议。
相较于HTTP,WebSocket 提供了更快的数据传输速度和更低的延迟,使得实时应用和交互成为可能。
在Java 中,我们可以通过使用WebSocket API 和相关的库来实现WebSocket 应用。
2.WebSocket 案例一:聊天室聊天室是一个经典的实时通信应用。
在这个案例中,我们可以使用Java WebSocket 实现一个简单的聊天室,让用户能够实时地发送和接收消息。
通过WebSocket,我们可以实现客户端与服务器之间的双向通信,让用户能够实时地看到其他人发送的消息。
3.WebSocket 案例二:在线投票在线投票是一个实时的数据收集和处理应用。
使用Java WebSocket,我们可以实现一个实时的在线投票系统。
在这个系统中,用户可以实时地投票并查看投票结果。
通过WebSocket,我们可以实时地更新投票数据,让用户能够看到实时的投票结果。
4.WebSocket 案例三:实时股票信息实时股票信息是一个需要快速响应的应用。
使用Java WebSocket,我们可以实现一个实时的股票信息展示系统。
在这个系统中,用户可以实时地查看股票的涨跌情况。
通过WebSocket,我们可以实时地更新股票数据,让用户能够看到实时的股票信息。
5.总结Java WebSocket 为实时应用和交互提供了强大的支持。
通过使用WebSocket,我们可以实现聊天室、在线投票和实时股票信息等应用,为用户提供更加丰富和实时的体验。
JAVA局域网聊天系统源代码
JAVA局域网聊天系统源代码【附件】附件1:JAVA局域网聊天系统源代码:zip【法律名词及注释】1:局域网(LAN):指在有限的地理范围内构建的计算机网络,用于连接位于同一建筑物或同一物理区域的计算机设备。
2:源代码(source code):指计算机程序的人类可读形式,通常采用编程语言编写的文本文件。
源代码需要经过编译才能转换为机器可执行的形式。
3:聊天系统(chat system):指一种通过计算机网络实现用户之间即时通信的系统,用户可以发送文字、图片、音频、视频等信息,并能够实时接收、查看其他用户发送的信息。
【正文】1:引言1.1 目的1.2 背景1.3 范围2:系统概述2.1 功能概述2.2 系统组成2.3 技术选型3:系统设计3.1 用例图3.2 类图3.3 数据库设计3.4 网络通信设计3.5 用户界面设计4:功能模块4.1 用户注册登录模块 4.1.1 注册功能4.1.2 登录功能4.2 好友管理模块4.2.1 好友列表展示 4.2.2 添加好友功能 4.2.3 删除好友功能4.3 聊天功能模块4.3.1 发送文本消息 4.3.2 发送图片消息 4.3.3 发送音频消息 4.3.4 发送视频消息 4.4 群组功能模块4.4.1 创建群组4.4.2 加入群组4.4.3 群组聊天5:系统实现5.1 开发环境5.2 开发工具5.3 源代码结构5.4 主要代码逻辑解析6:测试与部署6.1 单元测试6.2 集成测试6.3 UI测试6.4 部署配置7:系统运行与维护7.1 运行环境7.2 系统运行步骤7.3 常见问题与解决方法7.4 系统维护与升级【附件】附件1:JAVA局域网聊天系统源代码:zip【法律名词及注释】1:局域网(LAN):指在有限的地理范围内构建的计算机网络,用于连接位于同一建筑物或同一物理区域的计算机设备。
2:源代码(source code):指计算机程序的人类可读形式,通常采用编程语言编写的文本文件。
java简单的聊天窗口代码
要创建一个简单的Java聊天窗口,您可以使用Java的图形用户界面(GUI)工具包Swing。
以下是一个基本的聊天窗口示例:```javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class ChatWindow extends JFrame implements ActionListener {private JTextField inputField;private JTextArea chatArea;private String message = "";public ChatWindow() {super("简单聊天窗口");setSize(400, 300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);inputField = new JTextField();chatArea = new JTextArea();JButton sendButton = new JButton("发送");sendButton.addActionListener(this);JScrollPane scrollPane = new JScrollPane(chatArea);chatArea.setAutoscrolls(true);getContentPane().add(inputField,BorderLayout.SOUTH);getContentPane().add(sendButton, BorderLayout.EAST); getContentPane().add(scrollPane,BorderLayout.CENTER);}public void actionPerformed(ActionEvent e) {if (e.getSource() == sendButton) {message += inputField.getText() + "\n";chatArea.append(inputField.getText() + "\n");inputField.setText(""); // 清空输入框}}public static void main(String[] args) {ChatWindow chatWindow = new ChatWindow();}}```这个程序创建了一个简单的聊天窗口,用户可以在输入框中输入消息,然后点击"发送"按钮将消息发送到聊天区域。
基于javaEE 的Web的聊天室设计与实现
第 5 章 系统设计与实现...............................................................................................................13 5.1 系统模块分析...................................................................................................................13 5.2 系统的具体实现...............................................................................................................13 5.2.1 注册登录模块.........................................................................................................13 5.2.2 聊天室选择模块.................................................................................................... 14 5.2.3 聊天主界面模块.................................................................................................... 15 5.2.4 系统管理员模块......................................................................................................16
利用JAVA实现简单聊天室
利用JAVA实现简单聊天室1.设计思路Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。
而且,Java 很小,整个解释器只需215K的RAM。
因此运用JAVA程序编写聊天室,实现简单聊天功能。
程序实现了聊天室的基本功能,其中有:(1)启动服务器:实现网络的连接,为注册进入聊天室做准备。
(2)注册登陆界面:填写基本信息如姓名等,可以供多人进入实现多人聊天功能。
(3)发送信息:为用户发送信息提供平台。
(4)离开界面:使用户退出聊天室。
(5)关闭服务器:断开与网络的连接,彻底退出聊天室。
2.设计方法在设计简单聊天室时,需要编写5个Java源文件:Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。
3 程序功能图及程序相关说明(1)主功能框图(2) 聊天室基本功能表4.程序代码是说明程序中引入的包:package Chat; import .*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.io.*;(1)服务器端代码中用户自定义类:类名:Server作用:服务器启动继承的接口名:ActionListenerpublic class Server implements ActionListener{定义的对象:count //记录点机关闭按钮次数2次关闭soconly //只有SOCKET,用于群发sockets//所有客户的SOCKETsocket_thread //Socket所在的线乘,用于退出;frame // 定义主窗体panel //定义面板start,stop //启动和停止按钮主要成员方法:public void center //定义小程序查看器的位置public void actionPerformed //定义处理异常机制定义子类:serverRun,Details继承的父类名:Threadclass serverRun extends Thread //启线乘用于接收连入的Socket class Details extends Thread //具体处理消息的线乘,只管发送消息创建一个ServerSocket 对象,用于接受指定端口客户端的信息ServerSocket server = new ServerSocket("1234");接受请求时候,通过accept()方法,得到一个socket对象。
java聊天室 实验报告
java聊天室实验报告Java聊天室实验报告引言:聊天室是一种通过网络连接,允许用户在同一平台上进行实时交流的应用程序。
随着互联网的普及,聊天室成为人们日常生活中不可或缺的一部分。
本实验旨在通过使用Java编程语言,设计和实现一个简单的聊天室应用程序,并探讨其实现过程中所涉及的关键技术和挑战。
一、项目背景随着网络技术的飞速发展,人们对于实时交流的需求不断增加。
聊天室作为一种方便快捷的交流工具,受到了广大用户的欢迎。
本项目旨在利用Java编程语言,实现一个基于网络的聊天室应用程序,以满足用户的实时交流需求。
二、项目目标1. 设计和实现一个基于Java的聊天室应用程序。
2. 实现用户之间的实时消息传递功能。
3. 提供可靠的用户身份验证机制,确保聊天室的安全性。
4. 实现聊天记录的存储和查看功能,方便用户回顾历史消息。
三、技术实现1. 服务器端在服务器端,我们使用Java的Socket编程实现了与客户端的连接和通信。
通过建立一个服务器Socket,监听指定端口,可以接受来自客户端的连接请求。
一旦连接建立,服务器端就会创建一个新的线程来处理该客户端的请求,并实现实时消息的传递和处理。
2. 客户端在客户端,我们同样使用Java的Socket编程实现了与服务器端的连接和通信。
客户端通过建立一个Socket,指定服务器的IP地址和端口号,即可与服务器建立连接。
客户端通过输入消息并发送给服务器,同时接收来自服务器的消息并显示在界面上。
3. 用户身份验证为了确保聊天室的安全性,我们使用了用户身份验证机制。
在用户登录时,客户端将用户名和密码发送给服务器端。
服务器端通过验证用户信息的正确性,返回登录结果给客户端。
只有通过身份验证的用户才能进入聊天室并参与实时交流。
4. 聊天记录存储为了方便用户回顾历史消息,我们实现了聊天记录的存储和查看功能。
服务器端将接收到的消息保存在数据库中,并提供查看聊天记录的接口。
用户可以通过指定时间范围或关键词来查询历史消息,以便回顾和查找需要的信息。
JavaSocket实现聊天室附1500行源代码
JavaSocket实现聊天室附1500⾏源代码⽬录项⽬需求分析基础分析项⽬部分代码摘要Dao的链表存储实现ServerListenServerReceive再看⼀下客户端的ClientReceive项⽬问题选择框中出现的不是⽤户名服务端点击消息发送按钮没有反应不能显⽰在线⼈数服务端退出时没有消息Java养成计划(打卡第31,2天)内容管理:Sockect聊天室的实现Java界⾯使⽤了各种组件,对于这部分不了解的不⽤担⼼,⽬前掌握⼀个⼤概就OK项⽬需求分析需要完成⼀个简单聊天⼯具的界⾯及功能,实现服务器中转下的多客户端之间的通信,系统完成的功能有程序启动后能看到当前有那些机器上线,可弹出对话聊天框,可以在其中编辑要发送的聊天信息,并进⾏发送⼀旦某个⽹内的机器上线了,可即时通知,并能更新⽤户界⾯的⽤户列表双击某个列表项时,可弹出对话聊天框,可以在其中编辑要发送的信息并发送聊天界⾯⼈性化,下⾯时发送框,上⾯有已有聊天记录,并借助滚动条看到当次所有聊天记录当有⼈向本机器发送消息时,可显⽰⽤户接收到的信息,并且显⽰是谁所发,同时进⾏信息的回复基础分析⾸先这是⼀个聊天⼯具,使⽤的是C/S结构,要模拟就要使⽤net的Scocket和ServerSocket模拟客户端和服务端这⾥综合运⽤了多种知识,已经不再是简单的java SE知识,其中界⾯编程占据主要代码,这⾥可以贴⼏张图看看效果,这是我肝了2天才肝完的,这⾥已经可以实现多态设备的连接分为3个包Sever包主要是服务器的相关代码,主要是实现与⽤户的交互Dao包是模拟的数据库包,存储所有的⽤户信息,实现增删改的操作Client是客户代码包,只要在电脑上运⾏这⾥的代码,就可以出现客户端界⾯,约定好ip和端⼝号就可以通信了。
这⾥就真正实现了客户端型软件,只是软件功能简单,可以使⽤web编程实现另外⼀种架构可以来看⼀下界⾯再来看⼀下客户端和服务端的交流项⽬部分代码摘要Dao的链表存储实现package Dao;/*** 演⽰程序为了简化就不⽤数据库存储,使⽤单链表完成数据库各项功能* 这⾥⼀定要写测试代码检查各项功能是否可⽤* 最开开始我测试了add,del,find功能,却没有测试getCount功能,结果存在问题,后⾯突然放开测试才发现错误 */public class UserLinkList {private Node head;private int count;public boolean addUser(Node client){if(head == null){//头节点也存储数据head = client;count++;return true;}else {Node p = head;for(;p.next != null;p = p.next);{p.next = client;count++;return true;}}}public int getCount() {return count;}public Node findUser(String name){Node p = head;while(p != null )//p.next != null没有包含最后⼀个结点{if(ername.equals(name)){return p;}p = p.next;}return null;}public Node findUser(int index){int pos = 0;Node p = head;while(p != null&& pos < index){p = p.next;pos++;}if(p != null&& pos == index){return p;}return null;}public boolean delUser(Node client){//删除后长度也要减少Node p = head;if(ername.equals(ername)){//删除头结点head = head.next;count--;return true;}while(p != null){//忘记循环了if(ername.equals(ername)){p.next = p.next.next;count--;return true;}p = p.next;}return false;}/*** 这⾥可以设置⼀个显⽰的⽅法,供检查使⽤*/public void display() {Node p = head;int pos = 1;while(p != null){System.out.println("第"+pos + "个⽤户"+ername);p = p.next;pos++;}}}/*public static void main(String[] args) {//经过测试发现没有问题,可以正常使⽤ Node client1 = new Node();ername = "张三";Node client2 = new Node();ername = "李四";Node client3 = new Node();ername = "王五";//其他的就不测试了,反正该项就可以测试了UserLinkList userLinkList = new UserLinkList();//⾃动初始化userLinkList.addUser(client1);userLinkList.addUser(client2);userLinkList.addUser(client3);// userLinkList.display();Node node = userLinkList.findUser(0);userLinkList.delUser(node);userLinkList.display();System.out.println(userLinkList.getCount());}*/现在编写这段代码应当是⾮常简单的,注意⼀定要测试ServerListen简单看⼀下这个监听线程,可以监听⽤户是否上线package Server;/*** @author OMEY-PC*本程序的作⽤是实现服务器侦听的线程化,其中run⽅法通过client = new Node();创建⼀个客户端对象,通过client.socket = server.accept来设定接⼝,通过client.input *output来建⽴输⼊输出流*/import java.io.*;import .*;import Dao.*; //连接数据import javax.swing.*;public class ServerListen extends Thread{ServerSocket server;JComboBox combobox;JTextArea textarea;JTextField textfield;UserLinkList userLinkList;Node client;ServerReceive recvThread;public boolean isStop;/*** 聊天服务端的⽤户上下线侦听类*/public ServerListen(ServerSocket server,JComboBox combobox,JTextArea textarea,JTextField textField,UserLinkList userLinkList) {this.server = server;bobox = combobox;this.textarea = textarea;this.textfield = textField;erLinkList = userLinkList;isStop = false;}@Overridepublic void run() {while(!isStop && !server.isClosed())//没有停⽌服务{try {client = new Node();client.socket = server.accept();//⽤来指代所连接的客户端client.output = new ObjectOutputStream(client.socket.getOutputStream());client.output.flush();client.input = new ObjectInputStream(client.socket.getInputStream());ername = (String)client.input.readObject();//显⽰提⽰信息combobox.addItem(ername);//改成⽤户名userLinkList.addUser(client);textarea.append("⽤户" + ername+"上线"+"\n");textfield.setText("在线⽤户"+ userLinkList.getCount()+"⼈\n");recvThread = new ServerReceive(textarea,textfield,combobox,client,userLinkList);recvThread.start();//启动线程}catch (Exception e) {e.printStackTrace();}}}}ServerReceive该线程实现服务器与⽤户之间的信息交互package Server;/*** @author OMEY-PC*服务器收发消息的类*/import .ServerSocket;import javax.swing.*;import Dao.*;public class ServerReceive extends Thread{JTextArea textarea;//消息展⽰域JTextField textfield;//⽂本输⼊域JComboBox combobox; //复选框Node client;//⽤户UserLinkList userLinkList;public boolean isStop;public ServerReceive(JTextArea textarea, JTextField textfield, JComboBox combobox, Node client,UserLinkList userLinkList) {this.textarea = textarea;this.textfield = textfield;bobox = combobox;this.client = client;erLinkList = userLinkList;isStop = false;}@Overridepublic void run(){//向所有⼈发送⽤户的列表sendUserList();while(!isStop && !client.socket.isClosed()){try {//类型,对谁,状况,⾏为,信息String type = (String)client.input.readObject();if(type.equalsIgnoreCase("聊天信息")){String toSomebody =(String)client.input.readObject();//从客户端接收信息String status = (String)client.input.readObject();String action = (String)client.input.readObject();String message = (String)client.input.readObject();String msg = ername+" "+ action + "对"+ toSomebody +" 说 " + message + "\n";//接收的消息 if(status.equalsIgnoreCase("悄悄话")){msg = "[悄悄话]" + msg; //若为悄悄话,就在前⾯加上标识}textarea.append(msg);if(toSomebody.equalsIgnoreCase("所有⼈")){sendToAll(msg);//这⾥是接受的⽤户消息,和之前的向所有⼈发消息不⼀样}else {//向⽤户发消息try {client.output.writeObject("聊天信息");client.output.flush();//刷新流client.output.writeObject(msg);client.output.flush();}catch (Exception e) {e.printStackTrace();}Node node = userLinkList.findUser(toSomebody);if(node != null){node.output.writeObject("聊天信息");node.output.flush();node.output.writeObject(msg);//向选定信息发送信息node.output.flush();//刷新输出流缓冲区中的信息}}}else if(type.equalsIgnoreCase("⽤户下线")){Node node = userLinkList.findUser(ername);userLinkList.delUser(node);String msg = "⽤户"+ ername +"下线\n";int count = userLinkList.getCount();combobox.removeAllItems();combobox.addItem("所有⼈");int i = 0;while(i < count){node = userLinkList.findUser(i);if(node == null){i++;continue;}combobox.addItem(ername);i++;}combobox.setSelectedIndex(0);//选择第⼀个,所有⼈textarea.append(msg);textfield.setText("在线⽤户"+ userLinkList.getCount() +"⼈\n");sendToAll(msg);sendUserList();//重新发送⽤户列表break;}}catch (Exception e) {e.printStackTrace();}}}/*** 向所有⼈发送消息*/public void sendToAll(String msg){int count = userLinkList.getCount();int i = 0;while(i < count){//给⽤户列表中的每⼀个⼈都发送消息Node node = userLinkList.findUser(i);if(node == null){i++;continue;}try {//输出流node.output.writeObject("聊天信息");node.output.flush();node.output.writeObject(msg);//聊天消息写⼊输出流(to client)node.output.flush();}catch (Exception e) {e.printStackTrace();}i++;}}/*** 向所有⼈发送⽤户列表*/public void sendUserList() {String userList = "";int count = userLinkList.getCount();int i = 0;while(i < count){Node node = userLinkList.findUser(i);if(node == null){i++;continue;}userList += ername;userList += "\n";i++;}i = 0; //给每个⼈发送消息while(i < count){Node node = userLinkList.findUser(i);if(node == null){i++;continue;}try {node.output.writeObject("⽤户列表");node.output.flush();node.output.writeObject(userList);node.output.flush();}catch (Exception e) {e.printStackTrace();}}i++;}}/*** 本程序可以实现通过线程向所有⼈发送消息,⽤户列表,以及向选定的⼈发送聊天消息等,主要是是实现服务端收发消息的线程化,其中sendUserList()发送列表, * client.input.redObject()获取客户端发送到服务端的消息,通sendToAll(),将发送到发送到所有⼈的信息发送到各个客户端*/再看⼀下客户端的ClientReceive该线程是实现客户端与系统之间的信息交互,注解丰富package Client;import java.io.*;import .*;import javax.swing.*;public class ClientReceive extends Thread{private JComboBox combobox;private JTextArea textarea;Socket socket;ObjectOutputStream output;ObjectInputStream input;JTextField showStatus;public ClientReceive(JComboBox combobox, JTextArea textarea, Socket socket, ObjectOutputStream output,ObjectInputStream input, JTextField showStatus) {bobox = combobox;this.textarea = textarea;this.socket = socket;this.output = output;this.input = input;this.showStatus = showStatus;}@Overridepublic void run() {//从服务端获得消息while(!socket.isClosed()){try {String type = (String)input.readObject();//获得流,read读取信息if(type.equalsIgnoreCase("系统信息")){String sysmsg = (String)input.readObject();textarea.append("系统信息" + sysmsg);}else if(type.equalsIgnoreCase("服务关闭")){output.close();input.close();socket.close();textarea.append("服务器已经关闭!\n");break;}else if(type.equalsIgnoreCase("聊天信息")){String message = (String)input.readObject();textarea.append(message);}else if(type.equalsIgnoreCase("⽤户列表")){String userlist = (String)input.readObject();String[] usernames = userlist.split("\n"); //⽤换⾏符分隔combobox.removeAll();//先移出去int i = 0;combobox.addItem("所有⼈");while(i < usernames.length){combobox.addItem(usernames[i]);i++;}combobox.setSelectedIndex(0);showStatus.setText("在线⽤户"+ usernames.length +" ⼈");}}catch (Exception e) {e.printStackTrace();}}}}其余的界⾯的部分就不放出来了,代码太长,每个都有400多⾏,如果有兴趣,就到我的gitee上去浏览,后⾯会放上地址项⽬问题选择框中出现的不是⽤户名查找相应模块发现是因为addItem中添加的时结点,⽽不是结点中的username,修改后正常服务端点击消息发送按钮没有反应查找监听器部分,发现监听器监听该部分代码写错,将button⼜写成sysMessage不能显⽰在线⼈数查找侦听线程,启动客户端发现抛出异常Cannot invoke “javax.swing.JTextField.setText(String)” because “this.textfield” is nulltextfield为空,查找问题源头;发现在构造⽅法中:the assignmen to variable has no effect;这是因为单词拼写错误,编译器并没有报错服务端退出时没有消息系统报错Cannot read field “input” because “node” is null意识到问题出在链表上,系统要求从0开始,⽽链表中的序号是从1开始的,修该链表中的findUser中的pos为0就解决写这个程序写了两天,直接废了~~到此这篇关于Java Socket实现聊天室附1500⾏源代码的⽂章就介绍到这了,更多相关Java Socket内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
聊天室系统
聊天室系统聊天室对于众多网民来说并不陌生,它是网络上大家讨论交流的有效平台。
由于Java强大的Internet网络程序设计功能,很多聊天室服务器端都是采用Java语言进行实现。
本章所要介绍的开发案例就是利用JA V A实现一个简单的聊天室系统的服务器端。
7.1聊天室系统介绍网络聊天室是典型的网络应用程序,其一般采用客户/服务器结构来完成整个功能的设计,下面将概要讨论网络聊天室系统的设计。
7.1.1客户/服务器模式一般聊天室采用的是客户/服务器模式,我们熟悉的QQ聊天室就是采用这种结构模式。
它包含了两个完整的应用程序,即客户端程序和服务器端程序,如图4-1所示。
其中,多个客户端程序可以同时与一个服务器进行通信,然后通过服务器的统一处理而完成聊天室各种所需要的功能,如各客户端之间的信息发送和接收。
图7-1 ICQ的客户与服务器模式我们从上可以知道,要实现该通信模式,首先应在服务器和客户端之间定义一套通信协议,并通过创建套接字来建立连接,然后客户与服务器端再在该连接上进行可靠的传输和接收数据。
客户端发出请求,服务器端监听各种请求并对其提供响应服务。
这也即典型的“请求—应答”模式。
7.1.2聊天室功能介绍聊天室用户功能用户注册新用户输入(用户登陆名,真实姓名,呢称,密码与确认密码),如果登陆名没有与系统中已注册的用户登陆名相同,且密码与确认密码一致,则系统报告该用户注册成功,否则提示错误消息。
用户登陆注册用户输入登陆名与密码,如果与系统中已注册的用户登陆名及密码匹配,则用户登陆成功,否则提示用户不存在或者密码不匹配。
用户登陆成功后,可以选择房间来发言聊天 参数设置(设置服务器IP,端口)在客户端设置聊天室服务器的参数,主要有IP地址和端口,把参数保存在一个XML 文件中,以便客户端重启时能读入设定的参数进入房间用户登陆成功后,可以从房间列表中选择某一房间进入,如果该房间的当前聊天室成员数没有超过该房间的限定人数,则系统允许该用户进入,否则提示该房间已满。
JAVA聊天程序设计代码及报告
一.系统需求分析网络聊天室通常直称聊天室;是一种人们可以在线交谈的网络论坛;在同一聊天室的人们通过广播消息进行实时交谈..在当今信息时代;越来越多的聊天工具被应用;java语言是当今流行的网络编程语言;它具有面向对象;与平台无关;安全;多线程等特点..使用java语言不仅可以实现大型企业级的分布式应用系统;还能够为小型的的;嵌入式设备进行应用程序的开发..面向对象的开发是当今世界最流行的开发方法;它不仅具有更贴近自然地语义;而且有利于软件的维护和继承;锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力..本程序正是用java语言实现了简单聊天功能..它是图形界面;线程;流与文件系统等技术的综合应用..其界面主要采用了java.awt包;java.swing包等..二.系统总体设计1.对性能的规定由于本软件知识一个聊天程序;程序只提供用户之间的聊天功能;故对网络传输数据要求不是很高;只要正常的传输速度就可以了..2数据管理IP地址IP;端口Port3.开发环境本软件采用Java语言编写;Java语言是一种跨平台的编程语言;所以本软件对操作系统没有特别的要求..而网络传输方面采用TCP/IP网络传输协议或者是RMI..4.设计概要1本软件客户端与用户共用一段程序..客户端编译运行后;在窗口选择----侦听..用户编译运行后;在窗口选择----连接..2本软件实现的功能有1允许服务器侦听客户端;客户端连接到服务器2允许服务区与客户端之间进行聊天;3允许服务器与客户端更改背景颜色;4 允许服务器与客户端更改字体颜色;5服务器与客户端时;会显示内容发送时间;6允许服务器与客户端用鼠标点击“发送”;按ENTER键均可发送内容7允许服务器与客户端用鼠标点击关闭时关闭聊天窗口三.系统详细设计1.代码功能描述1程序中引入的包:import java.awt.;import java.awt.event.;import javax.swing.;import java.;import java.io.;2代码中自定义的类:类名:chatHouse继承的类:JFrame实现的接口:ActionListener; Runnable作用:构造服务器界面以及客户端界面..定义的对象: TextArea ta;JTextField ip;JTextField port;JButton btn_server;JButton btn_client;JButton btn_backGroundCol;JButton btn_fontCol;JTextField send_text;JButton btn_send;JButton btn_close;JLabel pic;Socket skt;构造方法:public chatHouse主要成员方法:public void runpublic void actionPerformedActionEvent epublic void doServerpublic void doSend2.源代码chatHouse.javaimport java.awt.;import java.awt.event.;import javax.swing.;import java.;import java.io.;import java.util.;public class chatHouse extends JFrame implements ActionListener; Runnable{private TextArea ta;private JTextField ip;private JTextField port;private JButton btn_server;private JButton btn_client;private JButton btn_backGroundCol;private JButton btn_fontCol;private JTextField send_text;private JButton btn_send;private JButton btn_close;private JLabel pic;private Socket skt;public void run{try{BufferedReader br = new BufferedReadernew InputStreamReaderskt.getInputStream;whiletrue{String s = br.readLine; // 从网络读ifs==null break;ta.appends + "\n";}}catchException e{e.printStackTrace;}}public void actionPerformedActionEvent e{ife.getSource==btn_server{doServer;}ife.getSource==btn_client{doClient;}ife.getSource==btn_send{doSend;}}public void doServer{try{ServerSocket server = newServerSocketInteger.parseIntport.getText;skt = server.accept;ta.append"连接成功\n";new Threadthis.start;}catchException e{ta.append"服务器启动失败\n";}}public void doClient{try{skt = new Socketip.getText; Integer.parseIntport.getText;ta.append"连接成功\n";new Threadthis.start;}catchException e{ta.append"连接失败\n";}}public void doSend{Calendar c=Calendar.getInstance;int y=c.getc.YEAR;int M=c.getc.MONTH+1;int d=c.getc.DAY_OF_MONTH;int h=c.getc.HOUR_OF_DAY;int mm=c.getc.MINUTE;int ss=c.getc.SECOND;try{PrintWriter pw = new PrintWriterskt.getOutputStream;String s = send_text.getText;ifs==null return;ta.appendy+"-"+M+"-"+d+" "+h+":"+mm+":"+ss+"\n";ta.appends+"\n";pw.printlny+"-"+M+"-"+d+" "+h+":"+mm+":"+ss;pw.printlns;pw.flush;send_text.setText"";}catchException e{ta.append"发送失败\n";}}public chatHouse{super"聊天室";this.setBounds100;100;550;430;Container cc = this.getContentPane;JPanel p1 = new JPanel;cc.addp1; BorderLayout.NORTH;JPanel p2 = new JPanel;cc.addp2;BorderLayout.CENTER;JPanel p3 = new JPanel;cc.addp3;BorderLayout.SOUTH;pic=new JLabelnew ImageIcon"12.gif";cc.addpic;BorderLayout.EAST;p1.addnew JLabel"IP: ";ip = new JTextField"127.0.0.1"; 10;p1.addip;p1.addnew JLabel"Port: ";port = new JTextField"7777"; 4;p1.addport;btn_server = new JButton"侦听";p1.addbtn_server;btn_client = new JButton"连接";p1.addbtn_client;btn_backGroundCol =new JButton"背景色";p1.addbtn_backGroundCol;btn_fontCol =new JButton"字体颜色";p1.addbtn_fontCol;p2.setLayoutnew BorderLayoutta = new TextArea;p2.addta; BorderLayout.CENTER;send_text = new JTextField"Hello.";p2.addsend_text; BorderLayout.SOUTH;btn_send = new JButton"发送";p3.addbtn_send; BorderLayout.WEST;btn_close =new JButton"关闭";p3.addbtn_close; BorderLayout.CENTER;//---------------------------------------"关闭"按钮监听器 btn_close.addActionListenernew ActionListener{public void actionPerformedActionEvent e{System.exit100;}};//--------------------------------------- 背景变色监听btn_backGroundCol.addActionListenernew ActionListener{public void actionPerformedActionEvent e{JColorChooser chooser4=new JColorChooser;Color color=chooser4.showDialognull;"背景颜";Color.yellow; ta.setBackgroundcolor;}};//---------------------------------------字体变色监听btn_fontCol.addActionListenernew ActionListener{public void actionPerformedActionEvent e{JColorChooser chooser4=new JColorChooser;Color color=chooser4.showDialognull;"字体颜色";Color.black; send_text.setForegroundcolor;ta.setForegroundcolor;}};//---------------------------------------按ENTER键可发送监听btn_server.addActionListenerthis;btn_client.addActionListenerthis;btn_send.addActionListenerthis;setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;send_text.addKeyListenernew KeyAdapter{public void keyPressedKeyEvent e{ife.getKeyCode==KeyEvent.VK_ENTERdoSend;}};}public static void mainString args{new chatHouse.setVisibletrue;}}import java.util.;3.程序测试编译运行程序后;先选择对方IP;选择同样的Port..服务器先侦听;客户端再连接..连接成功;窗口会显示“连接成功”字样..接下来就可以聊天了..1 服务器与客户端聊天..2服务器与客户端聊天..服务器将背景颜色设为粉红;字体颜色设为蓝色.. 客户端将背景颜色设为蓝色;字体颜色设为红色..四.小结1.通过本次课程设计;使得自己懂得理论和实践相结合起来;从理论中得出结论;才能真正掌握这门技术;也提高了自己独立思考的能力;在设计的过程中;可以自己解决..真正体会到要将一门知识学的更深入;必须加强实践;多练习;才能发现问题所在..2..本程序实现的功能还比较简单不够完善;从中;我知道了自己的不足之处;决心增长自己的知识;设计更加好的程序;实现各种更加复杂的功能;如:传输文件;图片..以及登陆界面;昵称等..3.总的来说;这次实训对我很有帮助..让我学会了的不只是设计JAVA聊天室;更让我学会主动学习;而不是被动接收..这样才能更好的运用自己所学到的知识..另:附该代码所用到的图片 12.gif。
(完整word版)JAVA聊天室实验报告
Java聊天室实验报告班级: ******学号: ********姓名:***目录:一、实验目的.。
.。
...。
.。
..。
..。
....。
..。
...。
...。
...。
..。
.。
.。
3二、所需技术 .。
.。
..。
.。
..。
..。
..。
.。
.。
.。
....。
.....。
.。
.。
.。
...。
3三、需求分析。
..。
.。
.。
..。
...。
.。
..。
.。
...。
..。
.。
.。
..。
3四、系统设计 .。
..。
.......。
...。
.。
....。
...。
.。
...。
....。
..。
.....。
.41、服务器结构 ..。
.。
..。
...。
.。
.。
.。
.。
...。
.....。
.。
.。
.。
42、客户端结构 ..。
.。
.....。
..。
...。
.。
..。
.。
.。
...。
.。
..。
.。
.。
4五、实现细节。
..。
...。
..。
...。
.....。
..。
..。
.。
....。
..。
..51、客户端细节。
.。
..。
.。
...。
..。
.。
..。
...。
..。
..。
.。
52、服务器细节 .。
.。
.。
....。
.。
.。
..。
.。
.。
..。
..。
..。
..。
.。
.。
..6六、系统展示。
...。
.。
.。
.。
.。
.。
.。
.。
.。
..。
..。
..。
..。
..。
.。
(7)七、实验小结。
.。
....。
..。
....。
.。
.。
...。
..。
...。
.。
.。
.。
..。
. (9)Rain153 WeChat 聊天室系统一、实验目的:1、使用Java技术完成聊天室系统,深入学习使用Java语言。
2、使用Java 的多线程机制,深入理解Java多线程技术的应用。
3、使用GUI,对JFrame的深入学习。
4、使用网络编程,掌握基于TCP协议的Socket编程,了解Socket编程的协议约定,掌握简单应用协议的开发.5、使用C/S架构,对网络编程有一定的了解。
二、所需技术本系统要求使用java技术开发。
所需知识包括java程序设计语言、swing基本GUI组件、多线程编程、socket编程、集成开发环境使用eclipse。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
服务器端代码:import .*;import java.io.*;import java.util.*;import java.util.concurrent.*;import javax.swing.*;public class Server{private static final int PORT=6666;G_Menu gm=new G_Menu();private ServerSocket server;public ArrayList<PrintWriter> list;public static String user;public static ArrayList<User> list1=new ArrayList<User>();//定义用户集合public User uu;public Server(String user){er=user;}public void getServer(){list =new ArrayList<PrintWriter>();try{server=new ServerSocket(PORT);System.out.println("服务器启动,开始监听......");while(true){Socket client=server.accept();//接收客户端线程PrintWriter writer = new PrintWriter(client.getOutputStream());list.add(writer);Thread t = new Thread(new Chat(client));t.start();}}catch(Exception ex){ex.printStackTrace();}}public static void main(String[] args){new Server(user).getServer();}class Chat implements Runnable{Socket socket;private BufferedReader br;private String msg;private String mssg="";public Chat(Socket socket){try{this.socket=socket;}catch(Exception ex){ex.printStackTrace();}}public void run(){try{br=new BufferedReader(new InputStreamReader(socket.getInputStream()));while((msg=br.readLine())!=null){if(msg.equals("1008611"))//匹配字符串显示好友列表{msg=br.readLine();String[] st=msg.split(":");//将用户信息跟消息分隔开uu=new User(st[0],st[1],socket);//将用户信息添加到User对象中list1.add(uu);//将对象添加到用户集合Iterator<User> it=Server.list1.iterator();//遍历用户集合while(it.hasNext()){User use=it.next();msg=use.getName()+"("+use.getSex()+"):";mssg+=msg;//将所有的用户信息连接成一个字符串}sendMessage("1008611");//显示好友列表匹配标识sendMessage(mssg);//群发消息}else if(msg.equals("10010"))//显示说话消息{msg=br.readLine();System.out.println(msg);sendMessage("10010");//显示说话信息匹配标识sendMessage(msg);}else if(msg.equals("10086"))//显示进入聊天室{msg=br.readLine();System.out.println(msg);sendMessage("10086");//进入聊天室匹配标识sendMessage(msg);}else if(msg.equals("841163574"))//私聊{msg=br.readLine();String[] rt=msg.split("1072416535");//把传进来的用户信息跟说话内容分开System.out.println(rt[1]);//在服务器端显示说话内容String[] tg=rt[0].split(":");//因为是私聊,传过来两个用户的用户信息,这句作用是再把两个用户信息分开Iterator<User> iu=Server.list1.iterator();//遍历用户集合while(iu.hasNext()){User se=iu.next();if(tg[1].equals(se.getName()+"("+se.getSex()+")"))//如果传进来的用户信息跟集合中的用户信息吻合{try{PrintWriter pwriter=new PrintWriter(se.getSock().getOutputStream());//建立用户自己的流pwriter.println("841163574");//匹配标识pwriter.println(rt[1]);//向单独用户发送消息pwriter.flush();System.out.println(rt[1]);}catch(Exception ex){ex.printStackTrace();}}else if(tg[0].equals(se.getName()))//如果传进来的用户信息跟集合中的用户信息吻合{try{PrintWriter pwr=new PrintWriter(se.getSock().getOutputStream());//建立用户自己的流pwr.println("841163574");//匹配标识pwr.println(rt[1]);//向单独用户发送消息pwr.flush();System.out.println(rt[1]);}catch(Exception ex){ex.printStackTrace();}}}}else if(msg.equals("456987"))//下线{msg=br.readLine();System.out.println(msg);//在服务端显示信息sendMessage("456987");//匹配字符串sendMessage(msg);//匹配完毕后群发消息String[] si=msg.split(":");//将传过来的用户名跟信息分隔开Iterator<User> at=Server.list1.iterator();//遍历用户集合while(at.hasNext()){User sr=at.next();if(sr.getName().equals(si[0]))//如果传过来的用户名跟用户集合里的用户吻合{list1.remove(sr);//将吻合的用户移除sr.getSock().close();//关闭此用户的socket}}break;}else if(msg.equals("123654"))//刷新{String mssge="";Iterator<User> iter=Server.list1.iterator();//遍历用户集合while(iter.hasNext()){User uus=iter.next();msg=uus.getName()+"("+uus.getSex()+"):";mssge+=msg;//将所有的用户信息连接成一个字符串}sendMessage("123654");//发送刷新匹配标识sendMessage(mssge);//群发消息}}}catch(IOException ex){ex.printStackTrace();}}}public void sendMessage(String message)//群发消息方法{try{for(PrintWriter pw:list)//输出流集合{pw.println(message);pw.flush();}}catch(Exception ex){ex.printStackTrace();}}}客户端代码:import .*;import java.io.*;import java.util.*;import java.util.concurrent.*;public class Socket_one//客户端{private static final int PORT=6666;//端口public static String user;public static Socket socket;public Socket_one(String user){er=user;try{socket=new Socket("127.0.0.1",PORT);//建立socket连接System.out.println("【"+user+"】欢迎来到聊天室!");Thread tt=new Thread(new Recove(socket,user));//建立客户端线程tt.start();//启动线程}catch(Exception ex){ex.printStackTrace();}}public static void main(String[] args) throws Exception{new Socket_one(user);}}class Recove implements Runnable{public String user;private Socket socket;private BufferedReader keybord;public BufferedReader br;private PrintWriter pw;private String msg;G_Menu gm=new G_Menu();public Recove(Socket socket,String user) throws IOException{try{this.socket=socket;er=user;}catch(Exception ex){ex.printStackTrace();}}public void run(){try{br=new BufferedReader(new InputStreamReader(socket.getInputStream()));while((msg=br.readLine())!=null){String message=msg;if(message.equals("1008611"))//匹配字符串显示好友列表{gm.listModel1.clear();//接收前清空好友列表gm.jcomb.removeAllItems();//清空JComboxgm.jcomb.addItem("所有人");message=br.readLine();String[] str=message.split(":");//将接收到的所有用户信息分隔开for(String ss:str){gm.listModel1.addElement(ss);//将所有用户信息添加到好友列表gm.jcomb.addItem(ss);//将所有用户信息添加到JCombox}}else if(message.equals("841163574"))//私聊{message=br.readLine();System.out.println("收到:"+message);//在服务器端显示私聊消息gm.jta2.append(message+"\n");//在我的频道显示私聊信息}else if(message.equals("10010"))//显示说话消息{message=br.readLine();System.out.println("收到:"+message);//在服务器端显示说话信息gm.jta1.append(message+"\n");//在公共频道显示说话信息gm.jta2.append(message+"\n");//在我的频道显示说话信息}else if(message.equals("10086"))//显示进入聊天室{message=br.readLine();gm.jta1.append(message+"\n");//在公共频道显示进入聊天室信息gm.jta2.append(message+"\n");//在我的频道显示进入聊天室信息}else if(message.equals("123654"))//刷新{gm.listModel1.clear();//将好友列表清空gm.jcomb.removeAllItems();//将JCombox 清空gm.jcomb.addItem("所有人");message=br.readLine();String[] sr=message.split(":");//将接收到的用户信息分隔开for(String sst:sr){gm.listModel1.addElement(sst);////将刷新后所有用户信息添加到好友列表gm.jcomb.addItem(sst);//将刷新后所有用户信息添加到JCombox}}else if(message.equals("456987"))//下线{message=br.readLine();gm.jta1.append(message+"\n");//在公共频道显示用户下线信息gm.jta2.append(message+"\n");//在我的频道显示用户下线信息}}}catch(IOException ex){ex.printStackTrace();}}}登陆界面代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import javax.swing.border.*;class Landen extends Frame implements ActionListener{JFrame jf=new JFrame("聊天登陆");JPanel jp1=new JPanel();JPanel jp2=new JPanel();JPanel jp3=new JPanel();JPanel jp4=new JPanel();JLabel jl1=new JLabel("姓名:");JLabel jl2=new JLabel("地址:");JLabel jl3=new JLabel("端口:");JRadioButton jrb1=new JRadioButton("男生"); JRadioButton jrb2=new JRadioButton("女生"); JRadioButton jrb3=new JRadioButton("保密");public JTextField jtf1=new JTextField(10); public JTextField jtf2=new JTextField(10); public JTextField jtf3=new JTextField(10);JButton jb1=new JButton("连接");JButton jb2=new JButton("断开"); TitledBorder tb=new TitledBorder(""); ButtonGroup gb=new ButtonGroup();public void init()//显示登录界面{jb1.addActionListener(this);jb2.addActionListener(this);jp1.add(jl1);jp1.add(jtf1);jp1.add(jrb1);jp1.add(jrb2);jp1.add(jrb3);jp2.add(jl2);jp2.add(jtf2);jp2.add(jl3);jp2.add(jtf3);jp3.add(jb1);jp3.add(jb2);jp4.setLayout(new GridLayout(3,1));jp4.add(jp1);jp4.add(jp2);jp4.add(jp3);jf.add(jp4);jtf2.setText("localhost");jtf3.setText("6666");gb.add(jrb1);gb.add(jrb2);gb.add(jrb3);jf.setLocation(200, 200);jf.setSize(350, 200);jf.setResizable(false);jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);jf.setVisible(true);}public void actionPerformed(ActionEvent event)//事件触发{jb1.setText("连接");jb2.setText("断开");String s1=null;if(event.getActionCommand().equals("断开")){System.exit(0);}if(event.getActionCommand().equals("连接")){if(jtf1.getText().equals("")){JOptionPane.showMessageDialog(null,"请输入用户名!");}else if(!jrb1.isSelected()&&!jrb2.isSelected()&&!jrb3.isSelected()){JOptionPane.showMessageDialog(null,"请选择性别!");}else{jf.setVisible(false);if(jrb1.isSelected()){s1="boy";}else if(jrb2.isSelected()){s1="girl";}else if(jrb3.isSelected()){s1="secret";}G_Menu gmu=new G_Menu();gmu.getMenu(jtf1.getText(),s1);gmu.sock();}}}}public class Login{public static void main(String[] args){new Landen().init();}}主界面代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import .*;import java.io.*;class G_Menu extends JFrame implements ActionListener {JFrame jf=new JFrame("聊天室");public Socket_one soc;public PrintWriter pw;public JPanel jp1=new JPanel();public JPanel jp2=new JPanel();public JPanel jp3=new JPanel();public JPanel jp4=new JPanel();public JPanel jp5=new JPanel();public JPanel jp6=new JPanel();public JPanel jp7=new JPanel();public static JTextArea jta1=new JTextArea(12,42); public static JTextArea jta2=new JTextArea(12,42);public JLabel jl1=new JLabel("对");public static JComboBox jcomb=new JComboBox();public JCheckBox jcb=new JCheckBox("私聊");public JTextField jtf=new JTextField(36);public JButton jb1=new JButton("发送>>");public JButton jb2=new JButton("刷新");public static DefaultListModel listModel1;public static JList lst1;public String na;public String se;public String message;public void getMenu(String name,String sex)//显示聊天界面{jcomb.addItem("所有人");this.na=name;this.se=sex;jta1.setEditable(false);jta2.setEditable(false);listModel1= new DefaultListModel();lst1 = new JList(listModel1);lst1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);lst1.setVisibleRowCount(18);lst1.setFixedCellHeight(28);lst1.setFixedCellWidth(100);JScrollPane jsp1=new JScrollPane(jta1);JScrollPane jsp2=new JScrollPane(jta2);JScrollPane jsp3=new JScrollPane(lst1);jsp3.setBorder(new TitledBorder("好友列表"));jsp1.setBorder(new TitledBorder("主聊天频道"));jsp2.setBorder(new TitledBorder("我的频道"));jp1.setLayout(new GridLayout(2,1));jp1.add(jsp1);jp1.add(jsp2);jp2.setLayout(new FlowLayout(FlowLayout.LEFT));jp2.add(jl1);jp2.add(jcomb);jp2.add(jcb);jp3.setLayout(new FlowLayout(FlowLayout.LEFT));jp3.add(jtf);jp3.add(jb1);jp4.setLayout(new GridLayout(2,1));jp4.add(jp2);jp4.add(jp3);jp5.setLayout(new BorderLayout());jp5.add(jp1,BorderLayout.NORTH);jp5.add(jp4,BorderLayout.SOUTH);jp6.setLayout(new BorderLayout());jp6.add(jsp3,BorderLayout.NORTH);jp6.add(jb2,BorderLayout.SOUTH);jp7.setLayout(new FlowLayout(FlowLayout.LEFT));jp7.add(jp5);jp7.add(jp6);jf.add(jp7);jf.setLocation(200,200);jf.setSize(700,650);jf.setResizable(false);jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);jf.setVisible(true);jb1.addActionListener(this);jb2.addActionListener(this);jta1.setLineWrap(true);jta2.setLineWrap(true);jsp1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAY S);jsp1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ NEVER);jsp2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAY S);jsp2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ NEVER);jsp3.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAY S);jsp3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_jf.pack();}public void sock(){try{String user=na+"("+se+")";//将用户信息保存成字符串形式soc=new Socket_one(user);//创建客户端对象pw=new PrintWriter(soc.socket.getOutputStream());//创建输出流pw.println("1008611");//发送好友列表标识pw.println(na+":"+se);//发送用户信息pw.flush();pw.println("10086");//发送进入聊天室标识pw.println("【"+na+"】"+"进入聊天室");//发送进入聊天室信息pw.flush();}catch(Exception ex){ex.printStackTrace();}}public G_Menu() {//设置窗口关闭事件,如果点击窗口右上角叉号关闭,执行下边程序jf.addWindowListener( new WindowAdapter(){public void windowClosing(WindowEvent e){try {pw=new PrintWriter(soc.socket.getOutputStream());pw.println("456987");//发送下线标识pw.println(na+":离开聊天室");//发送下线信息pw.flush();jf.dispose();//关闭窗口}catch(Exception ex) {}}});}public void actionPerformed(ActionEvent event)//事件触发{jb1.setText("发送>>");jb2.setText("刷新");try{pw=new PrintWriter(soc.socket.getOutputStream());if(event.getActionCommand().equals("发送>>"))//点击发送触发{if(!jtf.getText().equals("")){if(jcb.isSelected()){String name1=(String)jcomb.getSelectedItem();message="悄悄话"+na+"("+se+")"+"对"+name1+"说:"+jtf.getText();pw.println("841163574");//发送私聊标识pw.println(na+":"+name1+"1072416535"+message);//发送私聊信息pw.flush();}else{pw.println("10010");//发送聊天标识pw.println(na+"说:"+jtf.getText());//发送聊天信息pw.flush();}}}else if(event.getActionCommand().equals("刷新"))//点击刷新触发{pw=new PrintWriter(soc.socket.getOutputStream());pw.println("123654");//发送刷新标识pw.flush();}}catch(Exception ex){ex.printStackTrace();}jtf.setText("");//清空输入栏信息jtf.requestFocus();//输入焦点}}实体类代码:import java.util.*;import .*;import java.io.*;class User{private String name;//用户姓名private String sex;//用户性别private Socket sock;//用户自己的socket public User(String name,String sex,Socket sock) {setName(name);setSex(sex);setSock(sock);}public String getName(){return name;}public void setName(String name){=name;}public String getSex(){return sex;}public void setSex(String sex){this.sex=sex;}public Socket getSock(){return sock;}public void setSock(Socket sock){this.sock=sock;}}使用说明:1、先将所有的类都编译一下2、先运行服务器端代码3、再运行登录界面代码。