Java项目(Chat即时聊天系统)
Java即时聊天程序

Java即时聊天程序2018 年12 月10 日一、课程题目实现一个Java版即时聊天程序。
【功能提示】1)用户登录及登录验证:用户能够使用固定帐号(帐号程序内置即可,无需完成额外的注册功能)登录系统,系统能对预定的帐号、密码进行验证;2)聊天功能:能够在两台以上的机器上登录运行程序,能使用不同帐号完成在线的即时消息发送(聊天);3)文件传输;4)好友管理:能够显示好友列表,并能够添加、修改、删除好友;5)在线、离线状态显示:能够显示好友的在线状态或离线状态。
6)聊天记录管理:能够以文件或数据库形式将聊天记录进行存储,并能打开、显示、删除所存储的聊天记录。
补充:其它可选的还包括Java多人在线网络聊天室、B/S结构的聊天系统等。
二、题目分析与设计1. 程序所使用的开发环境有:eclipse java EE、jdk1.8、mysql5.72.软件功能架构图如下:3. 论述界面设计过程,指出其设计上的创意及组件的布局策略。
本程序一共包含5个界面:(1)登录界面:组件有两个标签、一个文本输入框、一个密码输入框以及两个按钮,界面的布局管理器为空,各组件的位置通过设置其坐标点来确定。
(2)注册界面:组件有三个标签、一个文本输入框、两个密码输入框以及两个按钮,界面的布局管理器为空,各组件的位置通过设置其坐标点来确定。
(3)主页:主页是继承了JFrame类,采用默认的边界布局,由panelNorth面板、jtp(选项卡)两部分组成:○1panelNorth面板位于边界布局的北边,采用从左到右的流式布局,里面放了一个由头像和用户id组成的标签;○2jtp(选项卡)位于边界布局的中部,它的第一格窗也是采用边界布局,第一个格窗由3个部分组成,由上到下是panel_1(北边)、scroll(中部)、panel_2(南边)。
其中panel_1采用居中的流式布局,存放“刷新好友列表”的按钮;scroll放了一个表格JTabel,用来显示好友列表,表格可滚动,右键点击好友可删除,双击可进入与该好友的聊天窗口;panel_2采用表格布局管理器,放了三个按钮。
Java即时聊天系统的设计与实现 精品

C/S架构的即时聊天系统的设计与实现第一章引言1.1选题背景和意义随着经济全球化的发展,世界各地的不同人、组织、机构之间的联系越来越密切。
同时伴随着互联网技术的普及和发展,网络即时通信工具已经作为一种廉价、方便的信息交流工具越来越受到人们的青睐。
在21世纪初的短短十几年间,即时通信系统(IM)的发展不断地取得了惊人的成就。
从早期只能互相发送字符并显示在双方的屏幕上的实时通信程序到现在的图形化、面向互联网、多功能的即时通信系统,科学技术的进步和整合不断地促使着即时通信系统功能越来越丰富,用处越来越广泛。
从最早的即时通讯软件ICQ诞生至今,市场上不断涌现出类似的产品。
不少厂商分别推出了自己的IM,如腾讯QQ、阿里旺旺、新浪UC、移动飞信等,这些都是我们所熟悉的PC端的即时通讯软件。
随着智能手机、平板电脑的普及,一些移动端的即时通信系统也如雨后春笋般涌现出来,如小米公司的米聊,腾讯公司的微信,还有年轻人之间很流行的陌陌、游戏玩家常用的YY语音等。
这些软件本身功能也越来越丰富,远远超出了单纯的即时聊天系统的范畴。
现在的即时通信系统不仅仅是人们的沟通工具,还成为了人们利用其进行电子商务、工作、学习等交流的平台[15][16]。
在当今社会,不管是个人用户还是企业用户,对沟通的需求总是在不断地发展。
传统的沟通交流方式如电话、传真、邮件等已经不能完全满足人们学习、工作、生活的需要。
随着计算机软件、计算机网络和移动通信技术的发展融合,集方便、廉价、快捷、实时等优点于一身的即时通讯系统可以说是继电子邮件、万维网之后,互联网上最具有杀伤力的应用。
很难想象一台个人电脑没有安装像QQ 这样的即时通讯软件。
虽然即时聊天系统设计的初衷是聊天,但正如前面所说,其功能已经超出了聊天的范畴,随着企业即时通讯工具(EIM)的出现,IM系统更是成了企业信息发布、资源共享、问题探讨和网络营销的一把利器。
通过现有的技术,企业完全可以摒弃通用的免费的即时通讯系统,转而根据自己企业的需求定制开发自己专属的内部即时通讯系统,以实现更好的管理,提高员工的工作效率。
如何用Java编写一个简单的即时通讯应用

如何用Java编写一个简单的即时通讯应用如何用Java编写一个简单的即时通讯应用?随着互联网的快速发展,即时通讯应用在我们的生活中发挥着越来越重要的作用。
无论是社交媒体应用、在线游戏还是工作协作,即时通讯应用都扮演着连接人与人之间交流的重要角色。
本文将介绍如何用Java编写一个简单的即时通讯应用。
我们将以Java的Socket网络编程为基础,利用Socket和ServerSocket类来实现一个简单的即时通讯应用。
以下是实现该应用的步骤:1.创建一个服务器端:首先,我们需要创建一个服务器端来监听连接请求,并提供消息转发功能。
使用Java的ServerSocket类可以很容易地实现这一点。
创建一个ServerSocket对象,并使用accept()方法接受客户端的连接请求。
2.创建一个客户端:然后,我们需要创建一个客户端应用,用于与服务器端建立连接并进行通信。
使用Java的Socket类可以轻松实现这一点。
创建一个Socket对象,并使用connect()方法连接到服务器端。
3.实现消息传输:当连接建立好后,服务器端与客户端之间可以开始进行消息的传输。
可以使用Java的InputStream和OutputStream类来实现消息的读取和写入。
服务器端和客户端分别创建一个输入流和输出流对象,通过它们来进行数据的传输。
4.实现消息处理:当服务器端接收到客户端发来的消息时,需要对消息进行处理,并根据需要对消息作出相应的响应。
可以使用Java的多线程来处理消息的接收和处理。
服务器端可以创建一个线程池,每个线程负责处理一个客户端的消息请求。
5.实现用户界面:为了方便用户的使用,我们可以为即时通讯应用添加一个用户界面。
可以使用Java的窗口设计工具,如Swing或JavaFX,来设计一个用户友好的界面。
用户可以通过界面进行登录、发送消息、查看历史消息等操作。
在实现一个即时通讯应用时,还需考虑一些其他因素,如安全性和可靠性。
Java即时聊天系统的设计与实现

1 前言3ﻩ1.1课题选题背景 .................................................................................................... 31.2即时通信的概念和特点 .......................................................................................... 31.3即时聊天系统的发展 ............................................................................................ 42 涉及的相关技术及协议4ﻩ2.1 Java语言.............................................................................................................. 42.2 C/S模式介绍 (5)2.3Hibernate框架简介ﻩ63 系统需求分析6ﻩ3.1即时聊天消息的一般需求ﻩ63.2 即时消息的协议需求7ﻩ3.3即时消息的安全需求 (7)3.4即时信息加密和鉴别ﻩ73.5 即时通讯系统需求 .............................................................................................. 74系统设计 . (7)4.1即时聊天系统的实施原理 (8)4.2软件设计流程ﻩ94.3功能模块划分10ﻩ4.4数据库概要设计10ﻩ5详细设计11ﻩ5.1 服务器端的设计与实现 (11)5.1.2 主服务器类的设计11ﻩ5.1.2登录验证模块ﻩ135.1.3 注册处理模块 (13)5.2客户端的设计与实现 ....................................................................................... 145.2.1用户注册模块ﻩ145.2.2 用户登录ﻩ155.2.3在线用户显示设计16ﻩ5.2.4聊天信息发送与接收 (17)5.3数据库设计18ﻩ6结论 ............................................................................................................................... 19参考文献 (22)附录ﻩ23ﻬ基于Java即时聊天系统的设计与实现摘要:计算机网络技术高速发展的今天,即时通讯方式日益受到人们的青睐。
如何用Java编写一个简单的即时通讯应用

如何用Java编写一个简单的即时通讯应用一、介绍即时通讯应用是一种可以实时进行消息交流的应用程序,它可以用于个人之间的聊天、群组聊天、文件传输等功能。
在今天的社交网络时代,即时通讯应用已经成为人们日常生活中不可或缺的一部分。
本文将介绍如何使用Java编写一个简单的即时通讯应用。
二、技术选型在选择编写即时通讯应用的技术时,我们可以考虑使用Java语言作为开发工具。
Java是一种跨平台的编程语言,可以在不同的操作系统上运行。
它还拥有丰富的开发工具和框架支持,使得开发者可以快速地构建应用程序。
在这个项目中,我们将使用Java的Socket和ServerSocket类来实现网络通信功能。
其中Socket类用于客户端和服务器之间的通信,而ServerSocket类用于服务器端的监听和接收客户端的连接请求。
三、项目框架要编写一个简单的即时通讯应用,我们可以采用客户端-服务器架构。
客户端负责发送和接收消息,服务器端负责转发消息,并且维护用户之间的连接。
客户端和服务器之间的通信采用TCP协议,确保消息的可靠传输。
四、实现客户端首先,我们来实现客户端的功能。
客户端需要有一个图形用户界面,用于用户输入消息并显示消息。
我们可以使用Java的Swing框架来构建客户端的图形界面。
客户端的图形界面可以包括一个文本框用于输入消息,一个发送按钮用于发送消息,以及一个显示框用于展示接收到的消息。
我们还可以在客户端界面上添加用户登录和注册功能,以便用户可以输入用户名和密码来进行登录。
除了图形界面,客户端还需要和服务器进行通信。
我们可以使用Socket类来实现客户端和服务器之间的TCP连接。
客户端会主动向服务器端发送连接请求,并发送和接收消息。
五、实现服务器端接下来,我们来实现服务器端的功能。
服务器端需要能够监听客户端的连接请求,并接受客户端的连接。
一旦建立连接,服务器端需要维护这些连接,并转发客户端发送的消息。
在服务器端,我们可以创建一个ServerSocket对象,用于监听端口,当有客户端连接时,服务器端就创建一个Socket对象来和客户端进行通信。
java实训聊天系统报告总结

java实训聊天系统报告总结一、引言随着互联网的发展,即时通讯成为了人们日常生活中必不可少的一部分。
而Java语言作为当前最流行的程序语言之一,其庞大的社区和强大的跨平台特性让其成为了开发即时通讯软件的理想选择。
针对这一需求,我们进行了Java实训项目,完成了一个基于Java 语言的聊天系统。
本文主要对该聊天系统进行总结和说明。
二、项目简介聊天系统是一款基于Java语言的即时通讯软件,它的实现原理是使用Java Socket编程实现客户端和服务器之间的通信。
用户可以通过该聊天系统与其他任何使用该系统的用户进行即时通信,并进行聊天记录保存、文件传输等功能。
三、系统框架该聊天系统采用B/S架构,客户端使用JavaFx实现,服务器端使用Java网络编程实现。
其框架如下所示:客户端:JavaFx + Java网络编程服务器端:Java网络编程四、模块介绍1. 用户模块:用户模块是整个聊天系统的核心模块,包含用户登陆、注册、消息接收等功能。
服务器端需要对用户进行身份验证,并将用户信息存储到数据库中。
而客户端需要通过Socket连接服务器,与其他用户进行通信。
2. 消息模块:消息模块包含聊天记录、消息发送、群聊、私聊等功能。
客户端需要记录聊天记录,并将消息发送到服务器,缓存在本地并展示在用户聊天界面上。
而服务器端需要接收消息,并进行下发给对应用户的操作。
3. 文件传输模块:文件传输模块可以让用户在聊天中传输文件,包含文件选择、上传下载等功能。
该模块是服务于消息模块的,服务器端需要对文件进行存储和传输管理,客户端需要实现文件的选择和上传下载功能。
五、项目结构1. 服务器端服务器端的主要目的是接收客户端的请求并进行处理,其结构如下所示:1、UserServer:用户身份验证。
2、MsgServer:聊天记录的发送和接收处理。
3、FileServer:文件传输功能的实现。
4、DBUtils:数据库操作工具类。
2. 客户端客户端需要实现用户登录、注册、聊天、文件传输等功能,其结构如下所示:1、LoginController:登录页面的相关操作,包含用户登录和注册。
课程设计任务书--即时聊天系统
《JAVA程序设计》课程设计任务书--即时聊天系统一、课程设计任务与目的本课程设计要求学生对《即时聊天系统》进行分析、设计及编程实现。
要求该系统实现服务器端和客户端功能,可以在企业内部网络和互联网上运行。
可以和好友进行交流,信息即时发送,即时回复,传输文件等功能。
界面友好。
本课程设计对课程设计项目已经作了较为详细的分析及相关知识讲解,通过课程设计,促使学生专业技能得到综合训练,让学生了解软件开发基本技术和工作过程。
同时,本课程设计中将会让学生了解JAVA程序设计中一些高级技术。
通过本系统的开发,同学门要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养同学们从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。
二、系统开发步骤软件开发一般有以下步骤:1. 问题定义2. 可行性研究3. 需求分析4. 总体设计5. 详细设计6. 编码及单元测试7. 综合测试8. 软件维护其中1、2、3步可以整合为调研分析阶段,4、5、6、7步可以整合为项目实施阶段。
根据本次课程设计的实际情况,我们着重进行系统设计和编码实施。
该阶段主要工作有:1.系统结构的总体设计决定系统的总体结构,包括整个系统分哪些部分,各部分之间有什么联系以及已确定的需求对这些组成部分如何分配等方面。
2.数据结构定义定义软件处理的对象——类,定义数据处理流程。
3.详细设计对各功能模块的功能定义,说明模块之间的调用关系与接口(参数)。
4.编码及调试根据详细设计的要求,按照统一的要求和编码规范,用JAVA语言编码实现,同时负责每个模块的独立调试。
5.综合测试软件开发的后期是软件装配和综合测试。
软件测试一般有专业的测试人员,同时通过发布使用试用版(体验版)等方式让用户体验、测试。
在多次测试改进后,才正式发布。
三、系统功能需求描述1.客户端注册新用户功能。
2.客户登录功能。
3.添加/删除好友功能。
4.消息收发功能。
5.好友上下线提示。
6.用户基本信息管理。
使用Java编写一个简单的即时通讯应用
使用Java编写一个简单的即时通讯应用在当今社会,即时通讯应用已经成为我们生活中不可或缺的一部分。
无论是在个人生活中还是在商务领域,人们都需要使用即时通讯工具来进行沟通和交流。
因此,开发一个简单的即时通讯应用已经成为学习Java语言的重要一步。
在本文中,我将向大家介绍如何使用Java编写一个简单的即时通讯应用,让大家了解Java语言在创建实时通信工具方面的应用。
1.理解即时通讯应用的基本原理在开始编写即时通讯应用之前,我们首先需要理解即时通讯应用的基本原理。
即时通讯应用的核心功能是实现用户之间的即时交流,这包括文本消息、图片消息、语音消息以及视频通话等功能。
为了实现这些功能,我们需要通过网络将用户之间的信息进行传递,并在用户端进行相应的处理和展示。
因此,即时通讯应用的开发涉及到网络编程、用户界面设计、消息处理等多个方面的知识。
2.使用Java编写即时通讯应用的基本框架在使用Java编写即时通讯应用之前,我们需要先确定应用的基本框架。
一般而言,即时通讯应用的基本架构包括客户端和服务器端两部分。
客户端负责用户界面的展示和用户输入的处理,服务器端负责消息的转发和用户之间的连接。
因此,在使用Java编写即时通讯应用时,我们需要分别编写客户端和服务器端的代码,并保证它们之间可以进行稳定的通信。
3.编写客户端代码在Java语言中,我们可以使用Swing或JavaFX等工具来编写客户端的用户界面。
以JavaFX为例,在创建客户端代码时,我们需要先创建一个JavaFX的窗口,然后在窗口中添加文本框、按钮等组件,以实现用户注册、登录、发送消息等功能。
同时,我们还需要使用Java 的Socket类来实现客户端和服务器端之间的套接字通信,确保消息可以被正确地传递和接收。
4.编写服务器端代码与客户端不同,服务器端的代码需要更加复杂一些。
在Java语言中,我们可以使用ServerSocket类来创建服务器端的套接字,监听客户端的连接请求,并在连接建立后对客户端的消息进行处理和转发。
java网络即时通讯系统即时聊天系统java聊天室系统
目录摘要 IABSTRACT II第一章系统开发环境 11.1 ECLIPSE简介 11.2 ECLIPSE项目 21.3 ECLIPSE平台 21.3.1 Eclipse的特性 21.3.2 Eclipse平台的进一步划分 31.4 ECLIPSE 安装与运行 31.4.1 Eclipse的下载 31.4.2 Eclipse软件开发工具箱的安装和运行 4 1.5 TCP,UDP协议 51.5.1 TCP/IP协议 51.5.2 UDP协议 5第二章系统开发设计 62.1系统设计思想 62.1.1 客户层的设计 62.1.2 业务层的设计 62.1.3 服务器与客户机的设计 62.2功能模块 72.2.1 系统模块 72.2.2 服务器端模块 72.2.3 客户机端模块 7第三章系统应用技术 83.1 Socket,SocketServer技术 83.1.1 Socket的类型 83.1.2 Socket如何使用 83.1.3 ServerSocket如何使用 93.2 多线程技术 113.2.1 多线程的定义 113.2.2 实现多线程 113.2.3 多线程四种状态 143.2.4 线程同步 143.2.5 守护线程 153.3 SWING 153.3.1 布局管理器 153.3.2 Swing事件模型 173.3.3 事件与监听器的种类 183.3.4 javax.swing包简介 183.4 APPLET 233.4.1 Applet的限制 233.4.2 Applet的优势 233.4.3 Applet应用框架 24第四章系统实现 264.1 服务器端的实现 264.2 客户端的实现 28结束语 32参考文献 33致谢 341.载整个applet了。
JAR卷宗里的东西可以逐项地"数字签名"。
3.4.2Applet的优势1.没有安装的问题。
Applet是真正平台无关的(包括播放音频文件) ,所以你用不着去为不同的平台修改程序,用户也用不着安装完了之后再作调整。
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):指计算机程序的人类可读形式,通常采用编程语言编写的文本文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Java程序设计实训》开发Chat即时聊天系统一、开放实验项目Java项目开发—Chat即时聊天系统二、开放实验时间201X.XX.XX—201X.XX.XX三、开放实验地点专业微机室二(B-4009)四、开放实验目的综合利用JDK、Eclipse开发环境,实现中小型项目的设计。
本系统采用C/S架构,基于TCP协议实现数据在服务器和客户端之间进行传输,实现聊天信息的存储。
通过“Chat即时聊天系统”的设计过程,深刻了解掌握面向对象程序设计语言Java的核心概念和特性;了解编程技术知识,学会处理异常状况,深入了解Java数据库功能,熟练掌握图形界面的操作技术,掌握Java应用软件的开发环境和开发过程;灵活选择程序设计思想,在编写过程中进一步体会Java与其它编程语言的不同之处,分析出Java的优点和先进之处。
同时,使学生能够深入的了解软件项目开发的流程和步骤,掌握每一部分的设计和实现方法,以及充分利用现有的软件工程设计工具来完成项目的设计。
五、开放实验内容1.概要设计采用Socket类建立套接字实现客户端与服务端的通讯。
总体数据流图服务端数据流图2.设计原理(1).利用多线程实现多客户机制。
服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。
(2).服务器在接受客户方的请求后,立即高度一个线程以处理服务器与客户方之间的交互,主程序则返回继续监听端口,等待下一个客户的连接请求。
前一个线程在完成相应的交互过程后自动退出,连接也将自动关闭。
(3).在服务器的程序中首先创建单个Server Socket,并调用accept()来等候一个新连接,一旦accept()返回,就取得获得结果的Socket,并用它新建一个线程,令其只为那个特定的客户提供服务。
然后再调用accept(),等候下一个新的连接请求。
3.客户端设计(1)、数据流图.定义Client类控制客户端,用于实现客户端的接收信息与发送信息等操作(2)、客户端代码import .*;import java.io.*;public class Client extends Thread {Socket skt; // 用于客户端的连接InetAddress host; // 主机地址int port; // 端口号BufferedReader theInputStream;PrintStream theOutputStream;String readin;Face chat;public Client(String ip, int p, Face chat) {try {host = InetAddress.getByName(ip); // 获取IP地址port = p; // 获取端口号this.chat = chat;} catch (IOException e) {chat.ta.append(e.toString());}}public void run() {try {chat.ta.append("准备连线,稍后!");skt = new Socket(host, port); // 新建Socket对象chat.ta.append("成功\n"); // 缓冲区末尾添加字符串theInputStream = new BufferedReader(new InputStreamReader(skt.getInputStream()));theOutputStream = new PrintStream(skt.getOutputStream());while (true) {readin = theInputStream.readLine();chat.ta.append(readin + "\n");}} catch (SocketException e) {chat.ta.append("未连上!\n");chat.clientBtn.setEnabled(true);chat.serverBtn.setEnabled(true);chat.tfaddress.setEnabled(true);chat.tfport.setEnabled(true);try {skt.close();} catch (IOException err) {chat.ta.append(err.toString());}} catch (IOException e) {chat.ta.append(e.toString());}}public void dataout(String data) {theOutputStream.println(data);}}4、服务端的设计(1)、数据流图定义Server类控制服务端,用于实现服务端的接收信息和发送信息等操作(2)、服务端代码import java.awt.*;import .*;import java.io.*;public class Server extends Thread {ServerSocket skt; // ServerSocket类监听进入的连接,为每个新的连接产生一个Socket对象Socket Client[ ]=new Socket[10];Socket Client1=null;int i = 0;TextArea in;int port,k=0,l=0;PrintStream theOutputStream;Face chat;public Server(int port, Face chat) {try {this.port = port;skt = new ServerSocket(port);this.chat = chat;} catch (IOException e) {chat.ta.append(e.toString());}}public void run() {chat.ta.append("等待连线......");while (true) {try {Client[k] = skt.accept();//当有客户端连接时就新建一个子线程if (i < 2) {ServerThread server[] = new ServerThread[10];server[k]= new ServerThread(Client[k], this.chat, i);l=server.length;server[k].start();chat.ta.append("客户端"+ Client[k].getInetAddress() + "已连线\n");//for(int j=0;j<server.length;j++)theOutputStream = new PrintStream(server[k].getClient().getOutputStream());i = server[k].getI();k++;} else {//theOutputStream = new PrintStream(null);}} catch (SocketException e) {} catch (IOException e) {chat.ta.append(e.toString());}}}public void dataout(String data) {//for(int j=0;j<l;j++)theOutputStream.println(data);}}class ServerThread extends Thread {ServerSocket skt;Socket Client;TextArea in;int port,i;BufferedReader theInputStream;PrintStream theOutputStream;String readin;Face chat;public ServerThread(Socket s, Face chat, int i) {this.i = ++i;Client = s;this.chat = chat;}public int getI() {return this.i;}public Socket getClient() {return this.Client;}public void run() {try {theInputStream = new BufferedReader(new InputStreamReader(Client.getInputStream()));theOutputStream = new PrintStream(Client.getOutputStream());while (true) {readin = theInputStream.readLine();chat.ta.append(readin + "\n");}} catch (SocketException e) {chat.ta.append("连线中断!\n"); // 设置组件可用性chat.clientBtn.setEnabled(true);chat.serverBtn.setEnabled(true);chat.tfaddress.setEnabled(true);chat.tfport.setEnabled(true);try {i --;skt.close();Client.close();} catch (IOException err) {chat.ta.append(err.toString());}} catch (IOException e) {chat.ta.append(e.toString());}}public void dataout(String data) {theOutputStream.println(data);}}5、聊天界面的设计(1)、通过调用Face类对界面进行管理设计,运用Button、TextArea、Label等组件,然后通过actionPerformed触发事件来完成操作。
(2)、界面代码import java.awt.*;import java.awt.event.*;public class Face extends Frame {private static final long serialVersionUID = 1L;Button clientBtn, serverBtn;TextArea ta;TextField tfaddress, tfport, tftype,tfname;Label lbl1,lbl2,lbl3,lbl4;int port;Client client;Server server;boolean iamserver;static Face frm;public Face() { //实例化组件clientBtn = new Button("客户端");serverBtn = new Button("服务器");ta = new TextArea("", 10, 50,TextArea.SCROLLBARS_BOTH);lbl1 = new Label("IP地址:");tfaddress = new TextField("127.0.0.1", 10);lbl2 = new Label("端口:");tfport = new TextField("8888");lbl3 = new Label("发送内容:");tftype = new TextField(25);lbl4=new Label("昵称:");tfname=new TextField(30);tftype.addKeyListener(new TFListener());ta.setEditable(false);//向容器中加入以上组件setLayout(new FlowLayout());add(lbl1); add(tfaddress);add(lbl2);add(tfport);add(serverBtn); add(clientBtn);add(lbl4);add(tfname);add(ta);add(lbl3);add(tftype);//设置格式setLocation(350, 250); //窗口显示在屏幕的位置坐标setSize(400, 320); //设置窗体大小setTitle("图形界面的聊天程序");this.setVisible(true); //设置窗体可见clientBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {port = Integer.parseInt(tfport.getText());client = new Client(tfaddress.getText(), port, frm);client.start();tfaddress.setEnabled(false);tfport.setEnabled(false);serverBtn.setEnabled(false);clientBtn.setEnabled(false);tfname.setText("客户端");}}); //客户端事件响应serverBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {port = Integer.parseInt(tfport.getText());server = new Server(port, frm);server.start();iamserver = true;tfaddress.setText("成为服务器");tfaddress.setEnabled(false);tfport.setEnabled(false);serverBtn.setEnabled(false);clientBtn.setEnabled(false);tfname.setText("服务器");}}); //服务器端事件响应addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}}); //窗口事件响应}public static void main(String[] args) { //主方法frm = new Face();}private class TFListener implements KeyListener {public void keyPressed(KeyEvent e) {if (e.getKeyCode() == KeyEvent.VK_ENTER) { //按Enter输出显示聊天内容if (iamserver){ta.append(tfname.getText()+":\n" + tftype.getText() + "\n");server.dataout(tfname.getText()+":\n" +tftype.getText());}else{ta.append(tfname.getText()+":\n" + tftype.getText() + "\n");client.dataout(tfname.getText()+":\n" +tftype.getText());tftype.setText("");}}}public void keyTyped(KeyEvent e) {}public void keyReleased(KeyEvent e) {}}}6、测试与运行结果服务端的界面客户端界面六、开放实验总结通过这次的开放实验课程,掌握了聊天软件的运行模式,丰富了我对java应用程序编写聊天系统的认识,通过“Chat即时聊天系统”的设计过程,我深刻地认识了在操作过程中,面向对象程序设计语言java的核心概念和特性,以及对异常状况的处理和图形用户界面的操作的优越性,感觉通过此次开放实验课更加让我对学习产生了动力,我希望它不仅仅是一个课程,更是我在学习程序设计中的一次进步,我会通过它去更加努力实现和掌握更多的知识。