利用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地址。
用Java Socket实现网络聊天室
务的端 口为8 端 口. e n t 2 端 口, 0 t le 为 3 f p为 2 端 口。通常.从 0 1 2 t 1 — 0 3的端
程序使用 。
L号为系统保 留.大于 1 2 『 0 3提供给应 用 F i t t e m( e rnSra nw
B f e e o tu S r a u f r d u p t t em
t ryi
首先 分析一下聊天室的基 本功能 需
求
操 作系统的通 用网络编程标准 。在 网络 编程中最常用的方案便是客户 / 务器模 服 型。奉文提 出了在客户机 /服务器 模型 下用 j v o k t a a sc e 实现 I t r e n en t巾常见 的聊天 室软件 的解 决方案 。 Sc e o k t简介
e :
户 当用 户差 闭客 户 端退 出时 . 结束
与用户的 会话 .在服务器端注 销此用 户 2.客户 端 :提 供 良好 的用户 界 面 . 便 于用 户 进 行 连接 、交 谈 当与
个 具有 S c e 接 口的计算机通信 。『 okt 盏用 程序在 网络上传输 ,接收 的信 息都通过 这个 S c e 接 口来 实现 。在应 用开发中 okt
S s e u . r a l (E r r y tm o t p it n r o : e: )
端 有无 数据 发 出, 如有 则接 收数 据 , 更新显示 。 四 、聊 天室应 用程 序类音 规 划 9
经过分析 笔者主 要确定 了如下类 :
服务器端 :
}
如睹络上最通用 的 t 1 e 、f p等 .就 en t t 如主机 接收 到此请求 .则通信 建 是基于 s c e o k t的服 务程序 ,同一 台主机 立 .服务端产 生一个 S c e o k t实例 .同 可 以提供 多种 服 务,但他 们 并不冲 突 . 此 客 户端 进 行 通 信 ,如 上 。 只因为他们的通信端 口不同,如 h t t p服 然后客户端和服务端分别打 开相 应 的输入输 出流 进行数据 传送 。
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和WebSocket实现网页聊天室实例代码
使⽤Java和WebSocket实现⽹页聊天室实例代码在没介绍正⽂之前,先给⼤家介绍下websocket的背景和原理:背景在浏览器中通过http仅能实现单向的通信,comet可以⼀定程度上模拟双向通信,但效率较低,并需要服务器有较好的⽀持; flash中的socket 和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使⽤这两项功能. 可以预见,如果websocket⼀旦在浏览器中得到实现,将会替代上⾯两项技术,得到⼴泛的使⽤.⾯对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。
在JavaEE7中也实现了WebSocket协议。
原理WebSocket protocol 。
现很多⽹站为了实现即时通讯,所⽤的技术都是轮询(polling)。
轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。
这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然⽽HTTP request 的header是⾮常长的,⾥⾯包含的有⽤数据可能只是⼀个很⼩的值,这样会占⽤很多的带宽。
⽽⽐较新的技术去做轮询的效果是Comet – ⽤了AJAX。
但这种技术虽然可达到全双⼯通信,但依然需要发出请求。
在 WebSocket API,浏览器和服务器只需要做⼀个握⼿的动作,然后,浏览器和服务器之间就形成了⼀条快速通道。
两者之间就直接可以数据互相传送。
在此WebSocket 协议中,为我们实现即时服务带来了两⼤好处:1. Header互相沟通的Header是很⼩的-⼤概只有 2 Bytes2. Server Push服务器的推送,服务器不再被动的接收到浏览器的request之后才返回数据,⽽是在有新数据时就主动推送给浏览器。
基于JAVA的多人聊天室的系统设计
一、系统设计
1、用户界面设计
1、用户界面设计
聊天室的用户界面设计应遵循简单、直观、易用的原则。在聊天室中,用户 可以通过文本、语音、文件传输等多种方式进行交流。因此,界面设计中应包括 聊天窗口、语音聊天窗口、文件传输窗口等功能。
2、代码实现和优化
2、代码实现和优化
聊天室的代码实现应采用模块化的设计思想,将不同的功能模块进行分离, 以便于维护和扩展。在代码优化方面,应采用多线程技术,提高系统的并发性能 和稳定性。同时,应注意代码的健壮性和安全性,防止恶意攻击和数据泄露。
三、技术选型
1、系统架构
1、系统架构
本系统采用C/S架构,由客户端和服务器端两部分组成。客户端负责用户界面 的展示和用户数据的发送,服务器端负责用户注册登录的验证、聊天记录的存储 和管理、以及语音和文件传输等功能。
2、开发工具与技术方案
2、开发工具与技术方案
本系统开发使用JAVA语言,采用Eclipse作为开发工具。在技术方案上,我 们采用了多线程技术实现并发处理,使用Socket进行网络通信,同时采用了 JavaFX和Swing等前端技术进行界面设计。
2、常见问题与解决方法
2、常见问题与解决方法
在测试过程中,我们遇到了一些问题,如网络延迟、掉线、卡顿等现象。针 对这些问题,我们采用了如下解决方法:采用心跳检测机制来检测掉线和卡顿现 象;通过缓存技术来减少网络传输次数;优化代码算法来提高程序响应速度。
3、系统维护与改进
3、系统维护与改进
为了保证系统的稳定性和安全性,我们需要对系统进行日常维护和升级。具 体工作包括:定期备份数据、更新安全补丁、优化系统性能等。同时,我们将持 续收集用户的反馈意见和建议,以便对系统进行改进和优化。
简易聊天应用程序地设计与实现
Java网络程序设计大作业分组报名表项目名称简易聊天应用程序的设计与实现网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过广播消息进行实时交谈。
运用java程序编写聊天室,实现简单的聊天功能。
它是图形界面,线程,流与文件系统等技术的综合应用。
程序实现了聊天室的基本功能,其中有:项目功能1.启动服务器。
2.启动登陆界面。
3.进入客户端界面。
4.发送信息。
5.离开客户端界面。
6.关闭服务器。
XX性别年级院、系、专业学号备注计算机科学与技术团队成计算机科学与技术员计算机科学与技术计算机科学与技术指导教师XX 研究方向软件设计职称团队联系方式联系人XX地址联系目录一、团队介绍及人员分工 (1)1.1团队介绍 (1)1.2人员分工 (1)二、作品概述 (1)2.1创作背景 (1)2.2功能概要 (1)2.3相关技术 (2)2.4作品可行性分析 (3)三、需求分析 (3)3.1功能性需求 (3)3.2非功能性需求 (6)四、作品实现 (6)4.1服务端界面实现 (6)4.2客户端界面实现 (8)4.3登录实现 (9)4.4聊天功能实现 (11)4.5退出功能实现 (12)五、作品设计、实现难点分析 (14)5.1难点分析 (14)5.2解决方案 (14)5.3测试结果 (15)一、团队介绍及人员分工1.1团队介绍吴益帆:有良好的统筹能力和领导力,能合理安排各组员工作。
X咪:踏实耐心,有良好的创新能力和策划能力。
沈丹丹:勤奋刻苦、有钻研精神,对待编程工作热情细心,孜孜不倦。
吴晓晓:对待工作细致专注,设计能力较强。
团队成员之间有较好的默契度及协作性。
分工明确,各司其职,在共同的努力及相互的配合下,共同解决程序中出现的困难并尽可能的优化程序,最终完成整个项目。
1.2人员分工吴益帆:负责程序最后的整理,完成部分功能及错误的处理。
X咪:负责程序的编码部分及项目具体功能的实现。
沈丹丹:负责程序的界面部分,为改程序搜索解决的方案。
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聊天窗口,您可以使用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写一网络聊天程序
}
if(e.getSource()==jButton2){
String s=this.jTextField3.getText().trim();
sendData(s);
}
}
private void listenClient(int port){//侦听
MyThread t=new MyThread();
t.start();
}
}catch(Exception ex){
}
}
private void sendData(String s){//发送数据
jButton2.setBorder(BorderFactory.createEtchedBorder());
jButton2.setFont(new java.awt.Font("Dialog", 0, 14));ctangle(440, 58, 73, 25));
JAVA写一网络聊天程序:
要求:聊天室服务器、聊天室客户端;客户端之间可以聊天。
因为我是初级选手,想借此程序分析学习java,所以代码最好多一点注释...
分数有限,望大家不吝赐教!!问题补充:
需要图形用户界面哦,最好用swing组件
服务器端:采用多线程,可以向客户广播:当前聊天室人数,客户名称列表,客户进入离开提示;
jTextField3.setBounds(new Rectangle(114, 60, 314, 24));
jTextField3.setText("");
jButton2.setText("发送");
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使用eclipse做聊天室程序
使用eclipse 做聊天程序Server=new ServerSocket(50000)s=server.accept()dataIn=new DataOutputStream( s.getInputStream()) dataOut=new DataInputStream( s.getOutputStream())dataIn.readUTF()dataOut.writeUTF() s=new Socket(“localhost”,5000)dataIn=new DataInputStream ( s.getInputStream()) dataOut=new DataInputStream( s.getOutputStream())dataIn.readUTF()dataOut.writeUTF()1、Create a Java project2、Create a class3、Wtite codeimport java.awt.*;import java.awt.event.*;import java.io.*;import .*;public class chat1{public static void main(String[] args){new chatframe("ChatroomSever");}}class chatframe extends Frame{ServerSocket server=null;Socket s=null;DataInputStream dataIn=null;DataOutputStream dataout=null;Panel p1,p2;Button bs,bl;TextArea t1;Label l;TextField t2;chatframe(String ss){ super(ss);p1=new Panel();p2=new Panel();t1=new TextArea();l=new Label("消息:");t2=new TextField("大师兄,我去捉妖精吧! ",36);bs=new Button(" 发送");bl=new Button(" 启动");bl.addActionListener(new ActionListener(){public void actionPerformed(java.awt.event.ActionEvent e){try{server=new ServerSocket(5000);s=server.accept();dataIn=new DataInputStream(s.getInputStream());dataout=new DataOutputStream(s.getOutputStream());}catch(Exception e1){}dp gg=new dp();Thread yy=new Thread(gg);yy.start();}});bs.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{dataout.writeUTF("八戒说: "+t2.getText());t1.append("八戒说: "+t2.getText()+"\n");}catch(IOException e1){}}});addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent ee){System.exit(0);}});setLayout(new FlowLayout());p1.add(t1);add(p1);p2.setLayout(new FlowLayout());p2.add(bl);p2.add(l);p2.add(t2);p2.add(bs);add(p2);setBounds(100,100,460,260);setVisible(true);}class dp implements Runnable{public void run(){while(true){try{t1.append(dataIn.readUTF()+"\n");}catch(IOException gg){}}}}}4、Run the project5、Client end :import java.awt.*; import java.awt.event.*; import java.io.*; import .*;public class chat2{public static void main(String[] args){new chatframe("ChatroomClient");}}class chatframe extends Frame{ServerSocket server=null;Socket s=null;DataInputStream dataIn=null;DataOutputStream dataout=null;Panel p1,p2;Button bs,bl,bx;TextArea t1;Label l;TextField t2;chatframe(String ss){super(ss);p1=new Panel();p2=new Panel();t1=new TextArea();l=new Label("消息:");t2=new TextField("那你就去吧,别让妖精迷住! ",36);bs=new Button(" 发送");bl=new Button(" 连接");bl.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{s=new Socket("localhost",5000);dataIn=new DataInputStream(s.getInputStream());dataout=new DataOutputStream(s.getOutputStream());}catch(IOException gg){}dp gg=new dp();Thread yy=new Thread(gg);yy.start();}});bs.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{dataout.writeUTF("悟空说: "+t2.getText());t1.append("悟空说: "+t2.getText()+"\n");}catch(IOException e1){}}});addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent ee){System.exit(0);}});setLayout(new FlowLayout());p1.setLayout(new BorderLayout());p1.add(t1);add(p1);p2.setLayout(new FlowLayout());p2.add(bl);p2.add(l);p2.add(t2);p2.add(bs);add(p2);setBounds(100,100,460,260);setVisible(true);}class dp implements Runnable{public void run(){while(true){try{t1.append(dataIn.readUTF()+"\n");}catch(IOException gg){}}}}}2008-5-28 5:37于惜福镇王家村宿舍。
聊天室系统
聊天室系统聊天室对于众多网民来说并不陌生,它是网络上大家讨论交流的有效平台。
由于Java强大的Internet网络程序设计功能,很多聊天室服务器端都是采用Java语言进行实现。
本章所要介绍的开发案例就是利用JA V A实现一个简单的聊天室系统的服务器端。
7.1聊天室系统介绍网络聊天室是典型的网络应用程序,其一般采用客户/服务器结构来完成整个功能的设计,下面将概要讨论网络聊天室系统的设计。
7.1.1客户/服务器模式一般聊天室采用的是客户/服务器模式,我们熟悉的QQ聊天室就是采用这种结构模式。
它包含了两个完整的应用程序,即客户端程序和服务器端程序,如图4-1所示。
其中,多个客户端程序可以同时与一个服务器进行通信,然后通过服务器的统一处理而完成聊天室各种所需要的功能,如各客户端之间的信息发送和接收。
图7-1 ICQ的客户与服务器模式我们从上可以知道,要实现该通信模式,首先应在服务器和客户端之间定义一套通信协议,并通过创建套接字来建立连接,然后客户与服务器端再在该连接上进行可靠的传输和接收数据。
客户端发出请求,服务器端监听各种请求并对其提供响应服务。
这也即典型的“请求—应答”模式。
7.1.2聊天室功能介绍聊天室用户功能用户注册新用户输入(用户登陆名,真实姓名,呢称,密码与确认密码),如果登陆名没有与系统中已注册的用户登陆名相同,且密码与确认密码一致,则系统报告该用户注册成功,否则提示错误消息。
用户登陆注册用户输入登陆名与密码,如果与系统中已注册的用户登陆名及密码匹配,则用户登陆成功,否则提示用户不存在或者密码不匹配。
用户登陆成功后,可以选择房间来发言聊天 参数设置(设置服务器IP,端口)在客户端设置聊天室服务器的参数,主要有IP地址和端口,把参数保存在一个XML 文件中,以便客户端重启时能读入设定的参数进入房间用户登陆成功后,可以从房间列表中选择某一房间进入,如果该房间的当前聊天室成员数没有超过该房间的限定人数,则系统允许该用户进入,否则提示该房间已满。
JAVAWEB制作简易聊天室1
三 程序源码: 登录页面 index.jsp,就是先进行一下初始化,然后重定向到主页面 ChatRoom.jsp,代码如下:<%@page import="java.util.*"%> <% ArrayList al_say=new ArrayList(); //创建 ArrayList 数组 application.setAttribute("say",al_say); response.sendRedirect("ChatRoom.jsp"); %>主聊天页面 ChatRoom.jsp 有两部分:form 表单用于输入提交聊天信息;另一部分用于显示聊 天内容。
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <form method=post action="say.jsp"> <input type="text" name="say"> <input type="submit" value="提交"> <input type="reset" value="重置"> </form> <hr /> <% ArrayList al_say=new ArrayList(); al_say=(ArrayList)application.getAttribute("say"); for (int says=0;says<al_say.size();says++) { %> <%=al_say.get(says)%><br /> <% } // %> 聊天信息处理页面 say.jsp 实现接收提交的聊天信息,放到 application 中,供主聊天页面 ChatRoom.jsp 显示聊天内容<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% String say=new String (request.getParameter("say").getBytes("iso-8859-1")); ArrayList al_say=new ArrayList(); al_say=(ArrayList)application.getAttribute("say"); al_say.add(say);response.sendRedirect("ChatRoom.jsp"); //张老师 %>。
(完整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)。
利用JAVA实现简单聊天室1.设计思路Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。
而且,Java 很小,整个解释器只需215K的RAM。
因此运用JAVA程序编写聊天室,实现简单聊天功能。
程序实现了聊天室的基本功能,其中有:(1)启动服务器:实现网络的连接,为注册进入聊天室做准备。
(2)注册登陆界面:填写基本信息如姓名等,可以供多人进入实现多人聊天功能。
(3)发送信息:为用户发送信息提供平台。
(4)离开界面:使用户退出聊天室。
(5)关闭服务器:断开与网络的连接,彻底退出聊天室。
2.设计方法在设计简单聊天室时,需要编写5个Java源文件:、、、、。
3 程序功能图及程序相关说明(1)主功能框图(2) 聊天室基本功能表4.程序代码是说明程序中引入的包:package Chat; import .*;import .*;import .*;import .*;import .*;(1)服务器端代码中用户自定义类:类名:Server作用:服务器启动继承的接口名:ActionListenerpublic class Server implements ActionListener{定义的对象:count 计结果与分析5个Java源文件:、、、、。
分别编译这5个Java源文件,或运行“javac *.java”命令,编译全部的源文件,然后运行连接服务器的主类,即运行Server类。
连接完毕后在运行注册的主函数类,即运行LogIn类。
首先运行启动服务器的文件,运行结果如下:图1服务器启动成功结果分析:在进入聊天室之前必须先启动服务器,实现服务器端的连接为用户的登录打开“窗口”。
其次运行用户注册登录文件,运行结果如下:图2用户登陆界面结果分析:添加用户信息,输入用户姓名,为用户进入聊天室提供关口。
并且利用以下语句实现如图3的界面 JLabel title=new JLabel("免注册版"); JLabel name=new JLabel("输入姓名");JButton send=new JButton("进入");添加注册信息后点击“进入”按钮,结果如图3图3显示用户已登录结果分析:当服务器启动用户完成信息注册时,在服务期端的界面中会显示当前在线的人员,并且提示客户已连接到服务器,可以进行聊天行为。
图4显示聊天内容结果分析:多个用户进入聊天室之后,用户可以在发送信息的文本框里填写自己的内容,点击“发送信息”按钮,信息会出现在上方的区域内,在界面的右方还可以显示在线人员的姓名,另在线用户可以知道有谁在聊天室内。
聊天结束点击“离开”按钮,结果如图5所示:图5离开聊天室点击服务器中的“停止”按钮,结果如图6.图7.所示:图6 点击“停止”按钮图7终止与服务器端连接结果分析:用户聊天结束点击“离开”按钮之后会在服务器端的界面上自动显示该用户已离开,提时、示服务器执行相关行为。
离开界面:使用户退出聊天室;关闭服务器:断开与网络的连接,彻底退出聊天室。
6.语句实现(1)package Chat;import .*;import .*;import .*;import .*;import .*;public class Server implements ActionListener{int count=0;Vector soconly=new Vector();HashMap sockets=new HashMap();HashMap socket_thread=new HashMap();ServerSocket serversocket;JFrame frame;JTextArea area=new JTextArea();JPanel panel=new JPanel();JButton start=new JButton("启动");JButton stop=new JButton("停止");public Server() {(start);(stop);(panel,;(area,;();center();;(true);(this);(this);"new");}public void center(){Toolkit toolkit=();Dimension e=();int x=2-(int)().getWidth()/2);int y=2-(int)().getHeight()/2);(x,y);}public void actionPerformed(ActionEvent e){JButton btn=(JButton)();if(btn==start){serverRun serverrun=new serverRun();"gogo");();}if(btn==stop){try{Iterator i = ();while ()) {Socket s = (Socket) ();ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());Objecting bj=new Objecting();("系统消息-----服务器马上关闭!!!!!!请马上关闭客户端"); }count++;if(count==2){(0);}(frame,"已通知客户端,请再次点击关闭按钮关闭");}catch(Exception ex){();}}}class serverRun extends Thread{public void run(){try{"开始SERVERRUN");serversocket=new ServerSocket(55555);("服务器启动\n");(false);while(true){Socket socket=();"连接成功");BufferedReader br=new BufferedReader(new InputStreamReader())); String name=();("服务器接收用户"+name+"的连接\n");(socket);Iterator i=();while()){Socket s=(Socket)();;import .*;import class LogIn implements ActionListener{JFrame frame;JLabel title=new JLabel("免注册版");JPanel banner=new JPanel();JTextField text=new JTextField(10);JPanel body=new JPanel();JPanel buttom=new JPanel();JLabel name=new JLabel("输入姓名");JButton send=new JButton("进入");public LogIn() {frame=new JFrame("注册");;(title);(name);(text);(send);(banner,;(body,;(buttom,;();center();(true);(this); }public void center(){Toolkit toolkit=();Dimension e=();int x=2-(int)().getWidth()/2);int y=2-(int)().getHeight()/2);(x,y); }public void actionPerformed(ActionEvent e){if().equals("")){(frame,"姓名不能为空");return;}else{new Client());(); } }public static void main(String args[]){new LogIn(); } }(4)package Chat;import .*;import .*;import .*;import .*;public class ClientUser extends WindowAdapter implements ActionListener,Runnable{ public JFrame jf;public JTextField jt;public JTextField name;public JButton connect;public JScrollPane jsp;public JTextArea jta;public JButton jb;public JLabel l;Socket soc;InputStream soc_in;OutputStream soc_out;BufferedReader Bsoc_in;PrintWriter Psoc_out;public ClientUser(){jf=new JFrame("Client Chat Room");jta=new JTextArea(10,30);(false);jsp=new JScrollPane(jta,,;jt=new JTextField(30);name=new JTextField(5);l=new JLabel("Please in put your name");connect=new JButton("Connect");(this);(this);jb=new JButton("Send The Message");(this);JPanel jp=new JPanel();JPanel jp2=new JPanel();(new FlowLayout());(jt);(jb);(l);(name);(connect);Container c=();(new GridBagLayout());GridBagConstraints gbc=new GridBagConstraints();=0;=0;(jp2,gbc);=0;=1;(jsp,gbc);=2;(jp,gbc);();(true); }public static void main(String[] args) {ClientUser cuser=new ClientUser(); }public void windowClosing(WindowEvent e){(0);}public void actionPerformed(ActionEvent e){if ()==connect){if().equals("")){new JOptionPane().showMessageDialog(null,"Please in Put your name First!");}else{try{soc=new Socket("localhost",55555);Psoc_out=new PrintWriter(),true);Bsoc_in=new BufferedReader(new InputStreamReader()));());}catch(Exception e1){();}(false);new Thread (this).start();} }if()==jt||()==jb){()+":"+()+"\n");()+":"+());("");} }public void run(){String text;while(true){try{text=();(text+"\n");}catch(Exception e){();}} }(5)package Chat;import .*;import .*;import .*;import .*;import class Client implements ActionListener{ ClientSocket cs;String name;Socket socket;JFrame frame;JTextArea area=new JTextArea(30,30);JTextField text=new JTextField(30);JButton send=new JButton("发送消息");JButton exit=new JButton("离开");JPanel banner=new JPanel();JPanel panel=new JPanel();List list=new List(35);JPanel right=new JPanel();JLabel welcome=new JLabel();public Client(String name2) {=name2;(name+"----欢迎来到聊天室");(false);frame=new JFrame("聊天室");;(false);(welcome);(banner,;(text);(send);(exit);(panel,;(area,;(new JScrollPane(list));(right,;();center();(true);connect();(this);(this);(new ActionListener(){public void actionPerformed(ActionEvent e){String to=();String content=(frame,"输入向"+name+"发送的私聊信息","私聊",; if(content==null){return;}else{Objecting o=new Objecting(to,"---私聊信息--"+name+":"+content); try{ObjectOutputStream out = new ObjectOutputStream());(o);(frame,to+"收到消息");}catch(Exception e2){();}}}});(new ActionListener(){public void actionPerformed(ActionEvent e){if().equals("")){(frame,"消息为空");return;}else{Objecting o=new Objecting("all",name+":"+())try{ObjectOutputStreamout=new ObjectOutputStream());(o);("");}catch(Exception e2){();}} } }); }public void connect(){try{socket = new Socket("localhost",55555);cs=new ClientSocket();();}catch(Exception e){();} }public void center(){Toolkit toolkit=();Dimension e=();int x=2-(int)().getWidth()/2);int y=2-(int)().getHeight()/2);(x,y);}class ClientSocket extends Thread{ObjectInputStream in;ObjectOutputStream out;PrintWriter pw;public void run(){try{pw = new PrintWriter(),true);(name);}catch(Exception e){();}while(true){try{in = new ObjectInputStream());Object o=();if(o instanceof String){()+"\n"); }if(o instanceof Vector){"列表操作");Vector v=(Vector)o;();Object []obj=();for(int i=0;i<;i++){((String)obj[i]); } }}catch(Exception e){();} } } }public void actionPerformed(ActionEvent e){JButton btn=(JButton)();if(btn==send){if().equals("")){(frame,"消息为空");return;}else{Objecting o=new Objecting("all",name+":"+());try{ObjectOutputStream out = new ObjectOutputStream());(o);("");}catch(Exception e2){();}}}if(btn==exit){Objecting o=new Objecting("exit",name);try{ObjectOutputStream out = new ObjectOutputStream());(o);();();}catch(Exception x){();}(0);} } }(5)package Chat;import .*;import .*;import .*;import .*;import .*;public class ServerHost extends WindowAdapter implements ActionListener,Runnable{ public JFrame jf;public JTextField jt;public JScrollPane jsp;public static JTextArea jta;public JButton jb;HashMap hm=new HashMap();JLabel inof;JTextField name;JCheckBox check;OutputStream soc_out;Vector Thread_vector=new Vector();public ServerHost(){jf=new JFrame("Server Chat Room");jta=new JTextArea(10,30);(false);jsp=new JScrollPane(jta,,;jt=new JTextField(30);(this);jb=new JButton("Send The Message");(this);check=new JCheckBox("Send to all");(true);inof=new JLabel("write the name you want to send");name=new JTextField(5);(false);JPanel jp=new JPanel();(new FlowLayout());(inof);(name);(jt);(jb);(check);Container c=();(new GridBagLayout());GridBagConstraints gbc=new GridBagConstraints();=0;=0;(jsp,gbc);=1;(jp,gbc);();(true);}public void windowClosing(WindowEvent e){(0); }public static void main(String[] args) {ServerHost sh=new ServerHost();new Thread(sh).start(); }public void run(){ServerSocket ssc=null;try{ssc=new ServerSocket(55555);}catch(Exception e){"1");}while(true){try{Socket soc=();BufferedReaderBsoc_in=new BufferedReader(new InputStreamReader()));String s=();(soc,s);ServerThread st=new ServerThread(soc); (soc);new Thread(st).start();}catch(Exception e){"2");}} }public void actionPerformed(ActionEvent e){boolean find=false;String temp="";try{if()){for(int i=0;i<();i++){Socket s=(Socket)(i));PrintWriterPsoc_out=newPrintWriter( (),true);temp="Server:"+()+"\n";("Server:"+());(); }(temp);(""); }else{"aaaaaaaa");Set shm=();Iterator it=();while()){me=());String Sstr=(String)());if())){Socket Smsoc=(Socket)());PrintWriterPsoc_out=newPrintWriter( (),true);()+());find=true; } }if(find==false){new JOptionPane().showMessageDialog(null,"Can not find the Clientuser");} }}catch(Exception e3){();}}}class ServerThread implements Runnable{Socket socket;InputStream soc_in;BufferedReader Bsoc_in;ServerThread(Socket socket){=socket;}public void run(){try{soc_in=();Bsoc_in=new BufferedReader(new InputStreamReader(soc_in)); String s=();while(true){if(s!=null)"\n");s=();}}catch(Exception e){"3");}}}。