局域网聊天室 JAVA课程设计
基于TCPIP的局域网聊天室的设计与实现
学士学位论文基于TCP/IP的局域网聊天室的设计与实现姓名:学号:指导教师:学院:专业:完成日期:学士学位论文基于TCP/IP的局域网聊天室的设计与实现姓名:学号:指导教师:学院:专业:完成日期:摘要随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。
局域网的发展也同样迅速.很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET。
因此基于局域网的即时通信工具,就这样应运而生了.所以本文提出了一个更加合理的设计,并在WINDOWS平台上加以了实现.在本实现内将客户端和服务端综合在一个程序之内,用多线程实现不同的并行任务。
并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。
本文通过局域网聊天系统来具体共享内存实现进程间的数据交换,利用windows消息机制实现进程间的同步,两种机制结合使用。
局域网聊天室作为一种新型的聊天工具可以提供更为及时、可靠、突破了必须有外界网络接入等优点,具有极其广泛的发展前景.本文介绍了采用JAVA编程开发局域网聊天系统的一套比较常用的解决方案。
采用TCP模式进行文字聊天, 在客户端之间点对点(C/C)的进行。
本系统采用典型的C/S(客户端/服务器)的框架模式,在该方案中采用Socket (套接字)原理实现网络通信,最终实现了通过服务器中转的文字聊天、文件传输功能,从而大大降低了程序的开发难度。
本系统主要包括登陆、聊天、好友列表和服务器管理几个部分。
本系统从需求分析、系统的设计、功能的实现都严格遵循了软件工程设计的思想.【关键词】Socket;TCP/IP;C/S;局域网聊天室AbstractWith the development of computer network technology,a variety of Web-based applications also will be the birth,such as Internet-based information release, communications, data sharing, and so on. LAN development is quickly. Many government agencies,businesses,schools,are first linked together in a unified LAN,respectively connected to the INTERNET, LAN-based instant messaging tool, and thus came into being。
局域网聊天室系统的设计与实现毕业设计
基于局域网的视频聊天室系统的设计与实现摘要视频聊天系统作为一种新型的通信和交流工具,突破了地域的限制,可以提供更为便捷、灵活、全面的音、视频信息的传递和服务,具有极其广泛的发展前景。
本文介绍了采用Microsoft Visual C++ 6.0编程开发视频聊天系统的一套比较常用的解决方案。
文字聊天采用TCP模式;语音视频聊天采用UDP模式,在客户端之间点对点的进行。
在该方案中,通过函数库VFW来实现视频捕获、影像压缩以及影像播放。
微软公司提供的专门用于视频捕获开发的工具包VFW,为在Windows操作系统中实现视频捕获提供了标准的接口,从而大大降低了程序的开发难度。
在视频传输方面,则通过组建视频帧,将位图形式的视频帧压缩成帧格式的Mpeg4流,传输到客户端后,解压并显示影像。
同时,在本方案中,采用了线程来实现语音录制和语音回放,最终实现了通过服务器中转的文字聊天、点对点的语音视频聊天。
关键词:文字聊天;VFW;视频捕获;视频传输;语音录制;语音回放The Design and Realization of LAN-Based Video Chat RoomSystemAbstractAs a new tool about communication, video chatting system has broken through geographical restrictions, has provides more convenient, flexible and complete transmission and service. Furthermore, it has a very bright future.The common solution about how to develop a video chatting system is introduced by the Microsoft Visual C + + 6.0 programming. TCP model is used in the text chatting and UDP for the point-to-point video chats between the Clients. In this plan, Video Capture, Video Compression Manager and DrawDib are realized by the functions of VFW Library. The special kit VFW (Video for Windows) in video capture offered by Microsoft Corporation, has provided a standard interface for video capture in Windows Operating System and thus greatly reduced the hardship of programming. In video transmission aspect, it requires a video frame which is compressed the video frame of bitmap into Mpeg4 steam of frame form. Then it will be decompressed into images since it has been arrived the Client. Meanwhile, the thread is used to achieve audio recording and replaying. Finally, it has realized the text chatting through a server to transit, the point-to-point audio and video chats.Key words:text chatting; VFW; Video Capture; video transmission; audio recording;audio playing目录论文总页数:24页1 引言 (1)1.1 课题背景 (1)1.2 国内外研究现状 (1)2 理论知识介绍 (1)2.1 VFW简介 (1)2.2 线程的实现方法 (4)3 需求分析 (5)3.1 软硬件环境 (5)3.2 需求分析 (5)4 系统结构 (7)4.1 硬件结构 (7)4.2 软件结构 (7)4.2.1 功能需求 (7)4.2.2 系统功能模块图 (8)4.3 系统各模块流程图 (8)5 系统的详细设计 (10)5.1 文字聊天 (10)5.1.1 TCP套接字的运用 (10)5.1.2 文字聊天实现 (11)5.2 语音视频聊天 (13)5.2.1 UDP套接字的运用 (13)5.2.2 视频的捕获 (14)5.2.3 捕获窗口 (16)5.2.4 视频捕获驱动 (18)5.2.5 语音录制 (18)5.2.6 语音回放 (19)5.2.7 视音频的传输 (20)结论......................................................................................................... 错误!未定义书签。
Java网络聊天室系统
lb2.setPreferredSize(new Dimension(50,30));
lb2.setBounds(100, 150, 100, 30);
panel.add(txtName);
txtName.setBounds(200, 150, 150, 30);
}catch(Exception e){e.printStackTrace();}
public RegisterFrame(LoginFrame loginFrame)
{
this.f = loginFrame;
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); //设置外观为系统本地外观
this.setPreferredSize(new Dimension(500,500));
this.setBounds(screenSize.width/2-250, screenSize.height/2-250, 500, 500);
this.setVisible(true);
getContentPane().add(lb1);
lb1.setFont(new Font("",Font.BOLD,30));
lb1.setBounds(200, 100, 400, 50);
getContentPane().add(panel);
panel.setLayout(null);
panel.setVisible(true);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
局域网内的多功能聊天室的设计与实现
JISHOU UNIVERSITY专业课课程论文题目:局域网内的多功能聊天室的设计与实现作者:学号:所属学院:信息科学与工程学院专业年级:总评分:完成时间:吉首大学信息科学与工程学院局域网内的多功能聊天室的设计与实现局域网内的多功能聊天室的设计与实现(吉首大学信息科学与工程学院,湖南吉首 416000)摘要在计算机技术飞速发展的今天,随着Internet的普及和发展,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见、最直接的网上交流的方式。
本论文主要研究一个以网络交友为主,为广大用户提供一个借助网络进行人际交往的信息平台。
本文所设计的局域网聊天系统是基于开放的WEB服务器应用程序开发设计的,其主要特征是能动态完成信息的传递且具有高效的交互性,有效的处理客户请求且具有更简单、更方便的数据库访问方法,易于维护和更新。
这种技术程序由JAVA、HTML、数据库和脚本语言组合而成。
主要功能模块包括:用户登录、注册部分;编写和显示聊天记录部分;管理员管理聊天室的管理部分。
聊天系统编写和显示聊天记录部分界面友好,提供动作、表情、公聊或私聊等操作;管理部分可以删除不守规矩的注册用户、踢出在线用户以及删除某些不合时宜的聊天记录等、根据数据库需求分析,在ACCESS中定义3个表:用user表来存放注册用户信息、用activetable 表来存放当前在线用户信息以及用message表来存放聊天记录。
本系统相比较其他信息交流平台具有开发方便、快捷,占用资源少,维护方便等优点。
【关键词】Java,数据库,脚本语言,聊天系LAN of multi-function chat room design and ImplementationRaotao(College of Information Science and Engineering,Jishou University,Jishou,Hunan 416000)AbstractThe rapid development of computer technology today, with the popularity and development of Internet, people's work and life has become increasingly inseparable from the support of the information network, and the chat room is one of the most common, the most direct online communication mode.In this thesis, a network of friends, for the vast number of users with a network of have the aid of interpersonal information platform.The design of the LAN chat system is based on an open WEB server application development and design, its main characteristic is to complete the information transmission dynamically with high interactivity, effective customer request and has a more simple, more convenient database accessing method, easy maintenance and update.The technical program by JAVA, HTML, database and script language and combination.The main function modules include: user login, registration section; write and display chat recording part; the administrator manage the chat room management section.Chat system to prepare and display chat interface friendly, with action, expression, the public chat or operation; management can remove the unruly registered user, play online user and delete certain be inopportune or inappropriate chat records, according to the database needs analysis, defined in ACCESS 3: user table table for registered users of information, using activetable table to store the current online user information and the use of message table to store the chat record.This system is compared with other information exchange platform with the development of convenient, fast, less resource occupation, easy maintenance and other advantages.Key words:JA V A; data capture; information analysis ; Winpcap;Jpcap目录第一章引言 (1)1.1课题背景及意义 (1)1.2课题研究现状 (1)1.3研究内容 (2)1.4论文组织方式 (2)第二章关键技术 (3)2.1 JAVA概述 (3)2.2套接字 (3)2.2.1 Socket简介 (3)2.2.2 Socket工作过程 (4)2.3 TCP三次握手 (4)第三章需求分析 (5)3.1功能需求 (5)3.2性能要求 (5)3.2.1处理数据能力 (5)3.2.2时间特性 (5)3.2.3 数据库需求 (5)3.2.5 其他标准的约束 (5)3.2.6 外部接口需求 (6)3.2.7 通信接口 (7)第四章概要设计 (8)4.1体系结构设计 (8)4.1.1 复审数据流、控制流 (8)4.1.2软件体系结构 (8)4.2模块设计 (9)4.2.1 用户扫描系统模块 (9)4.2.2 在线交流系统模块 (10)4.2.3 系统配置系统 (11)第五章详细设计 (14)5.1用户登录模块 (14)5.2用户列表模块 (15)5.3文本聊天模块 (17)第六章测试及实现结果 (21)6.1测试环境 (21)6.2测试过程 (21)6.2.1用户登录及用户列表 (21)6.2.2 文本聊天 (22)6.2.3 文件传输 (25)结束语 (27)参考文献 (28)第一章引言1.1课题背景及意义在网络越来越发达的今天,人们对网络的依赖越来越多,各种网络应用层出不穷,网络编程越来越受大广大程序员的重视。
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的多人聊天室的系统设计
一、系统设计
1、用户界面设计
1、用户界面设计
聊天室的用户界面设计应遵循简单、直观、易用的原则。在聊天室中,用户 可以通过文本、语音、文件传输等多种方式进行交流。因此,界面设计中应包括 聊天窗口、语音聊天窗口、文件传输窗口等功能。
2、代码实现和优化
2、代码实现和优化
聊天室的代码实现应采用模块化的设计思想,将不同的功能模块进行分离, 以便于维护和扩展。在代码优化方面,应采用多线程技术,提高系统的并发性能 和稳定性。同时,应注意代码的健壮性和安全性,防止恶意攻击和数据泄露。
三、技术选型
1、系统架构
1、系统架构
本系统采用C/S架构,由客户端和服务器端两部分组成。客户端负责用户界面 的展示和用户数据的发送,服务器端负责用户注册登录的验证、聊天记录的存储 和管理、以及语音和文件传输等功能。
2、开发工具与技术方案
2、开发工具与技术方案
本系统开发使用JAVA语言,采用Eclipse作为开发工具。在技术方案上,我 们采用了多线程技术实现并发处理,使用Socket进行网络通信,同时采用了 JavaFX和Swing等前端技术进行界面设计。
2、常见问题与解决方法
2、常见问题与解决方法
在测试过程中,我们遇到了一些问题,如网络延迟、掉线、卡顿等现象。针 对这些问题,我们采用了如下解决方法:采用心跳检测机制来检测掉线和卡顿现 象;通过缓存技术来减少网络传输次数;优化代码算法来提高程序响应速度。
3、系统维护与改进
3、系统维护与改进
为了保证系统的稳定性和安全性,我们需要对系统进行日常维护和升级。具 体工作包括:定期备份数据、更新安全补丁、优化系统性能等。同时,我们将持 续收集用户的反馈意见和建议,以便对系统进行改进和优化。
聊天室系统设计报告
聊天室系统设计报告青岛科技大学操作系统课程设计学生班级计算机132班学生学号1308010204学生姓名王永远2016 5 18______年 ___月 ___日设计题目:聊天室系统一、设计目的及要求1.1设计目的通过该聊天室系统,掌握网络编程的概念及基于网络的C/S模式软件系统开发,掌握基于TCP协议的Socket编程,掌握Java的多线程机制。
1.2设计要求:实现多个用户之间类似于QQ的聊天程序,有聊天界面,多用户之间既可以实现群聊,也可以单独聊天。
二、技术背景2.1网络编程就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。
2.2网络通信(1)IP地址:网络中设备的标识,不易记忆,可用主机名要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,在TCP/IP协议中,这个标识号就是IP地址。
(2)端口号:用于标识进程的逻辑地址物理端口网卡口逻辑端口我们指的就是逻辑端口A:每个网络程序都会至少有一个逻辑端口B:用于标识进程的逻辑地址,不同进程的标识C:有效端口:0~65535,其中0~1024系统使用或保留端口。
(3)传输协议:通信的规则,常见的有UDP,TCP UDP:将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。
TCP:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。
2.3 Socket(1)Socket套接字网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
(2)Socket原理机制A:通信的两端都有Socket。
B:网络通信其实就是Socket间的通信。
C:数据在两个Socket间通过IO传输。
2.4 TCP传输(1)客户端思路A建立客户端的Socket服务,并明确要连接的服务器。
java课程设计_
java课程设计_一、教学目标本课程旨在通过学习Java编程语言,使学生掌握Java编程的基本语法、面向对象编程思想以及常用数据结构;培养学生运用Java语言解决实际问题的能力;并通过对Java编程的实践,培养学生的逻辑思维能力、创新能力和团队合作意识。
具体来说,知识目标包括:1.理解Java编程语言的基本语法和编程规范。
2.掌握Java中的基本数据类型、运算符、控制语句。
3.理解面向对象编程的基本概念,如类、对象、封装、继承和多态。
4.熟悉Java中的常用数据结构,如数组、链表、树和图。
技能目标包括:1.能够使用Java编写简单的程序,实现基本的输入输出、计算等功能。
2.能够运用面向对象编程思想,设计并实现具有一定复杂度的程序。
3.能够运用Java中的数据结构,解决实际问题。
情感态度价值观目标包括:1.培养学生对编程语言的兴趣,激发学生的学习热情。
2.培养学生的逻辑思维能力,提高学生分析问题和解决问题的能力。
3.培养学生的团队合作意识,提高学生的沟通协作能力。
二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、面向对象编程思想和常用数据结构。
1.Java编程语言的基本语法:介绍Java编程语言的基本数据类型、运算符、控制语句等。
2.面向对象编程:讲解类、对象、封装、继承和多态等基本概念,并通过实例让学生深刻理解面向对象编程思想。
3.常用数据结构:介绍数组、链表、树和图等数据结构的基本概念和应用,并通过实例让学生学会运用数据结构解决实际问题。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。
1.讲授法:通过讲解Java编程语言的基本语法、面向对象编程思想和常用数据结构,使学生掌握相关知识。
2.案例分析法:通过分析实际案例,使学生更好地理解Java编程语言的应用和面向对象编程思想。
3.实验法:安排实验课程,让学生动手编写Java程序,巩固所学知识,培养学生的实际编程能力。
局域网课程设计报告
局域网课程设计报告一、课程设计目的本课程设计的主要目的是让我们深入了解局域网的工作原理、组建方法以及相关的网络技术,通过实际的设计和搭建过程,提高我们的动手能力和解决问题的能力,培养我们的团队合作精神和创新意识。
二、课程设计要求1、设计一个小型的局域网,满足一定数量的计算机终端接入需求。
2、规划网络拓扑结构,选择合适的网络设备和传输介质。
3、配置网络设备,包括交换机、路由器等,实现网络的互联互通。
4、进行 IP 地址规划和子网划分,确保网络地址的合理分配和有效利用。
5、测试网络性能,保证网络的稳定性和可靠性。
三、需求分析1、网络规模本次课程设计需要构建一个能够容纳 20 台计算机终端的局域网。
2、应用需求实现文件共享、打印机共享等基本的办公应用。
支持多媒体教学和在线学习等应用。
保证网络的安全性,防止非法访问和数据泄露。
四、网络拓扑结构设计根据需求分析,我们采用星型拓扑结构来构建局域网。
这种结构易于扩展、维护和管理,并且具有较高的可靠性。
网络中心使用一台高性能的企业级交换机作为核心交换机,通过双绞线连接到各个楼层的接入交换机。
接入交换机再通过双绞线连接到计算机终端。
为了实现与外部网络的连接,在网络边界部署一台路由器。
五、网络设备选型1、交换机核心交换机:选择具有高背板带宽、端口密度和转发性能的企业级交换机,如华为 S5735SL24T4SA。
接入交换机:选用性价比高的千兆以太网交换机,如 TPLINK TLSG1024DT。
2、路由器选用支持多种网络协议、具备防火墙功能的路由器,如华为AR6121-S。
六、传输介质选择1、双绞线用于计算机终端与接入交换机之间的连接,以及接入交换机与核心交换机之间的连接。
选择超五类或六类非屏蔽双绞线,以满足高速数据传输的需求。
2、光纤在核心交换机与路由器之间采用光纤连接,提高数据传输的速度和稳定性。
七、IP 地址规划与子网划分1、 IP 地址规划为了便于管理和维护,我们采用私网 IP 地址段 19216810/24。
Java聊天系统设计课程设计说明书
Java聊天系统详细设计1 引言1.1编写目的聊天系统详细设计是设计的第三个阶段,这个阶段的主要任务是在聊天概要设计的基础上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括数据结构和算法,为编写源代码提供必要的说明。
概要设计解决了软件系统总体设计问题,包括整体软件系统的结构,功能模块的划分,模块功能和模块间的联系等,详细设计则是要解决如何实现各个模块的内部功能,及模块设计,具体的说,模块设计就是为已经产生的聊天系统各个子系统设计详细的算法,但这并不等同于系统实现阶段用具体语言编码,它只是对实现细节做精确的描述,这样编码阶段就可以将详细中对功能实现的描述,直接翻译,转化为用某种程序设计语言写的程序。
1.2 背景根据山东科技大学教学要求,实现理论与实践相结合的办学理念,培养21世纪高素质人才,校方安排了与操作系统课程相关的课程设计。
1.3 定义1. 项目名称:Java聊天系统2. 项目提出者:山东科技大学3. 项目开发者:三个臭皮匠小组4. 用户:聊天群5. 运行环境:XP, win7,win8 unix操作平台6. 开发平台:Eclipse 、Java7.Eclipse:软件开发工具,J2EE可视化开发平台。
8.Java :面向对象开发语言。
1.4 参考资料[1]《软件工程实验指导书》清华大学出版社2003[2]王珊,萨师煊编著《数据库系统概论》高等教育出版社2006[3]钱乐秋编著《软件工程》清华大学出版社2007[4]张海藩编著《软件工程导论》清华大学出版社2008[5]汤子瀛编著《计算机操作系统》第三版西安电子科技大学出版社2007 2.总体设计2.1 需求概要(1)用户注册模块:对于有意使用本产品的用户首先要登陆我官网并打开相关的账户注册链接,进入账户注册页面。
根据相关提示操作:输入账户名,密码,确认密码,注册邮箱等(详细内容请到官网查询),在填写完相关信息后点击“注册”,会提示用户注册成功,并会给启用注册邮箱发送注册成功激活链接,用户只有通过打开邮箱激活成功以后才能登陆并使用本聊天软件(sisi)。
Java语言下的在线社交平台设计与实现
Java语言下的在线社交平台设计与实现一、引言随着互联网的快速发展,社交平台已经成为人们日常生活中不可或缺的一部分。
在这个信息爆炸的时代,人们渴望与他人分享生活、交流想法、建立社交关系。
本文将探讨如何利用Java语言设计和实现一个在线社交平台,让用户能够方便地进行社交互动。
二、技术选型在设计在线社交平台时,选择合适的技术栈至关重要。
Java作为一种稳定、高效的编程语言,具有广泛的应用领域,适合用于构建大型系统。
在开发在线社交平台时,可以选择Spring框架作为后端开发框架,结合Spring MVC和Spring Boot来实现RESTful API的开发。
同时,使用MySQL等数据库存储用户信息、帖子内容等数据。
三、功能设计1. 用户管理用户是社交平台的核心,因此需要实现用户注册、登录、个人信息管理等功能。
用户可以填写个人资料、上传头像,并且可以搜索其他用户并添加好友。
2. 帖子发布与评论用户可以发布文字、图片或视频帖子,并对其他用户的帖子进行评论和点赞。
帖子可以按照时间线展示,用户可以通过关注好友或话题来获取感兴趣的内容。
3. 私信功能用户之间可以发送私信进行一对一聊天,也可以创建群聊进行多人聊天。
私信功能能够增强用户之间的互动体验。
4. 搜索与推荐实现搜索功能,让用户可以快速找到感兴趣的内容或用户。
同时,根据用户的兴趣爱好和行为习惯,推荐相关内容给用户,提升用户粘性。
5. 数据统计与分析通过数据统计和分析,了解用户行为习惯、热门话题等信息,为运营提供决策支持。
可以统计每日活跃用户数、帖子点赞数等指标。
四、架构设计1. 前端架构前端采用HTML、CSS和JavaScript等技术实现页面布局和交互效果。
可以使用Vue.js或React.js等前端框架来简化开发流程,并提升用户体验。
2. 后端架构后端采用Spring框架实现业务逻辑处理和数据持久化。
使用Spring Security来保护接口安全性,确保用户信息不被恶意攻击者获取。
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使用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程序设计》课程设计五篇
《JAVA程序设计》课程设计五篇第一篇:《JAVA程序设计》课程设计JAVA程序设计》课程设计------Chatter即时聊天工具班级:姓名:学号:指导老师:日期:《目录1.引言.....................................................................................3 2.功能简介..............................................................................3 3.开发环境..............................................................................3 4.课程设计目的.......................................................................3 5.使用手册..............................................................................3 6.程序源代码...........................................................................4 4.1 serverJFrame.java (4)4.2 clientJFrame.java...............................................................9 7.程序运行效果图. (14)8.心得体会 (16)1.引言相信大家一想到基于TCP/IP协议的通信,都会想到利用Socket 类对象建立一条可靠的连接,这样就客户机/服务器就在这条连接上可靠地传输数据。
java网络编程实现一个聊天程序
class Rece implements Runnable { private DatagramSocket ds; public Rece(DatagramSocket ds) { this.ds = ds; } public void run() { try { while(true) { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); if("886".equals(data)) { System.out.println(ip+"....离开聊天室"); break; } System.out.println(ip+":"+data); } } catch (Exception e) { throw new RuntimeException("接收端失败"); 6
Tcp传输最容易出现的问题 l客户端连接上服务端,两端都在等待,没有任何数据传输。 l通过例程分析: 因为read方法或者readLine方法是阻塞式。 l解决办法: 自定义结束标记 使用shutdownInput,shutdownOutput方法。
演示tcp传输。 2
演示tcp传输。
1,tcp分客户端和服务端。 2,客户端对应的对象是Socket。 服务端对应的对象是ServerSocket。 客户端, 通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。 因为tcp是面向连接的。所以在建立socket服务时, 就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。 需求:给服务端发送给一个文本数据。 步骤: 1,创建Socket服务。并指定要连接的主机和端口。
Java聊天室的设计与实现毕业设计开题报告
[6] [美]Herbert Schidt著.Java参考大全.鄢爱兰.鹿江春译.北京:清华大学出版社,2006
[7]宛延闿等编著.实用Java程序设计教程.北京:机械工业出版社,2006
[8]陈国君等编著.Java2程序设计基础.北京:清华大学出版社,2006
3.显示用户:用户列表中可以看到自己的好友用户并区分在线和离线状态;
4.该系统客户端用户能够进行信息的发送和接受;
客户端关闭:关闭客户端图形用户界面,关闭客户端。
毕业设计开题报告
指导教ቤተ መጻሕፍቲ ባይዱ意见:
该生对本课题相关的知识与理论研究比较透彻,参考了许多的文献资料,具有一定的研究价值。
本课题结构合理,内容完整,主要观点突出,并且时效性强,是学生学习方向的延续,对于提高学生的能力有利。
同意该课题开题。
指导教师:
2017年2月21日
所在系审查意见:
同意开题
系主任:
年月日
3.指导教师对该学生前期研究工作的评价(是否同意继续研究工作)
指导教师亲笔签字:
年月日
备注:1、本表由学生填写,指导教师亲笔签署意见。
2、以上各项句间距可以根据实际内容需要调整。
参考文献:
[1]王路群,《Java高级程序设计》中国水利水电出版社2006
[2] Rogers Cadenhead著、梅兴文译,《Java编程入门经典》人民邮电出版社2007
[3]任泰明,《TCP/IP网络编程》人民邮电出版社2009
[4]柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社,2006
毕业设计开题报告
2.本课题要研究或解决的问题和拟采用的研究手段(途径):
利用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语言基础Java语言基础部分将介绍Java语言的基本概念、语法、数据类型、运算符、流程控制语句、数组、字符串和异常处理等内容。
学生将通过编写简单的Java程序来巩固所学知识。
二、面向对象编程面向对象编程部分将介绍Java语言中的面向对象编程思想,包括类、对象、继承、封装、多态和接口等概念。
学生将通过编写简单的面向对象程序来巩固所学知识。
三、图形用户界面设计图形用户界面设计部分将介绍Java语言中的Swing库,包括窗口、面板、按钮、文本框、标签、列表框、下拉框、滚动条和菜单等组件的使用。
学生将通过编写简单的图形用户界面程序来巩固所学知识。
四、网络编程网络编程部分将介绍Java语言中的网络编程,包括Socket编程、URL编程和HTTP编程等内容。
学生将通过编写简单的网络程序来巩固所学知识。
五、多线程编程多线程编程部分将介绍Java语言中的多线程编程,包括线程的创建、启动、休眠、等待和唤醒等内容。
学生将通过编写简单的多线程程序来巩固所学知识。
六、课程设计实践课程设计实践部分将要求学生根据所学知识,设计并实现一个简单的Java程序。
该程序可以是一个图形用户界面程序、一个网络程序或一个多线程程序等。
学生将通过实践来巩固所学知识,并提高自己的编程能力。
七、总结总结部分将对本课程设计进行总结,并对学生的学习成果进行评估。
同时,本部分还将介绍Java语言的一些高级特性,如泛型、反射和注解等内容,以便学生进一步深入学习Java编程语言。
总之,本课程设计旨在帮助学生深入理解Java编程语言的基本概念和应用,提高学生的编程能力和实践能力。
通过本课程设计的学习,学生将能够掌握Java语言的基础知识、面向对象编程、图形用户界面设计、网络编程和多线程编程等方面的知识,为今后的Java编程工作打下坚实的基础。
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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象程序设计》课程设计报告题目:局域网聊天室程序设计院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生姓名:程伟学号:20121183011指导教师:吴奕2014年12月29日至2015年1月9日华中科技大学武昌分校制面向对象程序设计课程设计任务书一、设计(调查报告/论文)题目局域网聊天室程序设计二、设计(调查报告/论文)主要内容内容:用来提供局域网中用户之间的交互通讯,使用Eclipse与JDK1.6工具,操作系统为WINDOWS,采用面向对象方法完成,包括总体设计、详细设计、编码实现、测试。
运用套接字Socket连接技术,实现客户端的套接字对象和服务器端的套接字对象之间的输入输出流的连接,达到数据报通信的目的基本功能与要求:实现聊天室服务器端的要求:①设计实现在特定端口上进行侦听,等待客户端的连接。
②用户确定服务器的侦听端口。
③系统能向已经连接到服务器端的用户发送系统消息。
④系统能统计在线人数。
⑤当系统停止服务时,设计程序应能断开所有的用户连接。
实现聊天室客户端的要求:①系统能连接已经开启聊天服务的服务端。
②用户确定要连接服务器端的IP地址与端口号,连接后系统应能提供显示的用户名。
③当服务器端开启的话,实现用户的登录与注销。
④用户可以通过设计的系统向所有人或者某一个人发送消息。
三、原始资料1.《面向对象程序设计课程设计》指导书2.耿祥义.JAVA大学实用教程.北京:清华大学出版社,2009.四、要求的设计(调查/论文)成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料[1]张广彬.Java课程设计案例精编(第二版).北京:清华大学出版社,2011.[2]耿祥义.Java课程设计(第二版).北京:清华大学出版社,2008.[3]耿祥义.JAVA大学实用教程.北京:清华大学出版社,2009.[4]邹林达.陈国君Java2程序设计基础.北京:清华大学出版社,2010.[5]邹林达.Java2程序设计基础实验指导.北京:清华大学,2010.指导教师(签名):20年月日目录1需求与总体设计 (1)1.1需求与系统功能图 (1)1.2系统类图 (2)1.2.1服务端系统 (2)1.2.2客户端服务系统 (3)2详细设计 (4)2.1聊天室服务器端的设计 (4)2.1.1ChatServer类 (4)2.1.2ServerListen类 (5)2.1.3ServerReceive类 (5)2.1.4PortConf类 (6)2.1.5Help类 (6)2.1.6UserLinkList类 (7)2.1.7Node类 (7)2.2聊天室客户端设计 (8)2.2.1ChatClient类 (8)2.2.2ConnectConf类 (9)2.2.3UserConf类 (9)2.2.4Help类 (10)2.2.5ClientReceive类 (10)3编码实现 (11)3.1服务器编码实现 (11)3.1.1ChatServer类 (11)3.1.2ServerListen类 (21)3.1.3ServerReceive类 (23)3.1.4PortConf类 (27)3.1.5UserLinkList类 (30)3.1.6Node类 (31)3.1.7Help类 (32)3.2客户端编码实现 (34)3.2.1ChatClient类 (34)3.2.2ClientReceive类 (46)3.2.3ConnectConf类 (48)3.2.4UserConf类 (51)3.2.5Hlep类 (54)4系统测试 (56)总结 (57)1需求与总体设计1.1需求与系统功能图本系统所要实现的主要功能是为广大用户提供一个借助网络进行人际交往的平台。
因为服务端采用多线程,所以性能有很大提升。
因为服务端和客户端之间采用TCP协议进行网络通信,建立的是可靠的、端到端的网络连接,所以可靠性和安全性都很好。
1.2系统类图1.2.1服务端系统1.2.2客户端服务系统2详细设计2.1聊天室服务器端的设计2.1.1ChatServer类ChatServer.java包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加时间监听与时间处理。
调用ServerListen类来实现服务端用户上线与下线的监听,调用ServerListen来实现服务器端的消息收发。
2.1.2ServerListen类ServerListen.java该类实现服务器用户上线与下线的监听。
该类对用户上线下线的监听是通过调用用户链表类(UserLinkList)来实现的。
当用户上线与下线情况发生变化时,该类会对主类的界面进行相应的修改。
2.1.3ServerReceive类ServerReceive.java该类是实现服务器消息收发的类,该类分别定义了向某用户及所有人发送消息的方法,发送的消息会显示在主界面类的街面上。
2.1.4PortConf类PortConf.java该类继承自Jdialog,是用户对服务器端监听端口进行修改配置的类。
2.1.5Help类Help.java服务端程序帮助类。
2.1.6UserLinkList类UserLinkList.java用户链表节点的具体实现类。
该类通过构造函数构造用户链表,定义了添加用户、删除用户、返回用户数、根据用户名查找用户、根据索引查找用户这5个方法。
2.1.7Node类Node.java用户链表的节点类,定义了链表中的用户。
该类与前面所讲的链表节点Node类的功能相当2.2聊天室客户端设计2.2.1ChatClient类ChatClient.java包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加时间监听与事件处理。
该类定义了Connect()与DisConnect()方法实现与客户端的连接与断开连接。
当登陆到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还定义了SendMessaga()方法来其他用户发送带有表情的消息或悄悄话。
2.2.2ConnectConf类ConnectConf.java该类继承自Jdialog,是用户对所有要连接的服务器IP及监听端口进行修改配置的类。
2.2.3UserConf类UserConf.java该类继承自Jdialog,是用户对链接到服务器时所显示的用户名进行修改配置的类。
2.2.4Help类Help.java客户端程序的帮助类。
2.2.5ClientReceive类ClientReceive.java该类是实现服务器端与客户端消息收发的类。
3编码实现3.1服务器编码实现3.1.1ChatServer类ChatServer.java包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加时间监听与时间处理。
调用ServerListen类来实现服务端用户上线与下线的监听,调用ServerListen来实现服务器端的消息收发。
/*聊天服务端的主框架类*/public class ChatServer extends JFrame implements ActionListener{ private static final long serialVersionUID=1L;public static int port=8888;//服务端的侦听端口ServerSocket serverSocket;//服务端SocketJComboBox combobox;//选择发送消息的接受者JTextArea messageShow;//服务端的信息显示JScrollPane messageScrollPane;//信息显示的滚动条JTextField showStatus;//显示用户连接状态JLabel sendToLabel,messageLabel;JTextField sysMessage;//服务端消息的发送JButton sysMessageButton;//服务端消息的发送按钮UserLinkList userLinkList;//用户链表//建立菜单栏JMenuBar jMenuBar=new JMenuBar();//建立菜单组JMenu serviceMenu=new JMenu("服务(V)");//建立菜单项JMenuItem portItem=new JMenuItem("端口设置(P)");JMenuItem startItem=new JMenuItem("启动服务(S)");JMenuItem stopItem=new JMenuItem("停止服务(T)");JMenuItem exitItem=new JMenuItem("退出(X)");JMenu helpMenu=new JMenu("帮助(H)");JMenuItem helpItem=new JMenuItem("帮助(H)");//建立工具栏JToolBar toolBar=new JToolBar();//建立工具栏中的按钮组件JButton portSet;//启动服务端侦听JButton startServer;//启动服务端侦听JButton stopServer;//关闭服务端侦听JButton exitButton;//退出按钮//框架的大小Dimension faceSize=new Dimension(400,600);ServerListen listenThread;JPanel downPanel;GridBagLayout girdBag;GridBagConstraints girdBagCon;/**服务端构造函数*/public ChatServer(){init();//初始化程序//添加框架的关闭事件处理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();//设置框架的大小this.setSize(faceSize);//设置运行时窗口的位置Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2);this.setResizable(false);this.setTitle("聊天室服务端");//设置标题setVisible(true);//为服务菜单栏设置热键'V'serviceMenu.setMnemonic('V');//为端口设置快捷键为ctrl+pportItem.setMnemonic('P');portItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));//为启动服务快捷键为ctrl+sstartItem.setMnemonic('S');startItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK));//为端口设置快捷键为ctrl+TstopItem.setMnemonic('T');stopItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_T,InputEvent.CTRL_MASK));//为退出设置快捷键为ctrl+xexitItem.setMnemonic('X');exitItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK));//为帮助菜单栏设置热键'H'helpMenu.setMnemonic('H');//为帮助设置快捷键为ctrl+phelpItem.setMnemonic('H');helpItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK));}/***程序初始化函数*/public void init(){Container contentPane=getContentPane();contentPane.setLayout(new BorderLayout());//添加菜单栏serviceMenu.add(portItem);serviceMenu.add(startItem);serviceMenu.add(stopItem);serviceMenu.add(exitItem);jMenuBar.add(serviceMenu);helpMenu.add(helpItem);jMenuBar.add(helpMenu);setJMenuBar(jMenuBar);//初始化按钮portSet=new JButton("端口设置");startServer=new JButton("启动服务");stopServer=new JButton("停止服务");exitButton=new JButton("退出");//将按钮添加到工具栏toolBar.add(portSet);toolBar.addSeparator();//添加分隔栏toolBar.add(startServer);toolBar.add(stopServer);toolBar.addSeparator();//添加分隔栏toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);//初始时,令停止服务按钮不可用stopServer.setEnabled(false);stopItem.setEnabled(false);//为菜单栏添加事件监听portItem.addActionListener(this);startItem.addActionListener(this);stopItem.addActionListener(this);exitItem.addActionListener(this);helpItem.addActionListener(this);//添加按钮的事件侦听portSet.addActionListener(this);startServer.addActionListener(this);stopServer.addActionListener(this);exitButton.addActionListener(this);combobox=new JComboBox();combobox.insertItemAt("所有人",0);combobox.setSelectedIndex(0);messageShow=new JTextArea();messageShow.setEditable(false);//添加滚动条messageScrollPane=new JScrollPane(messageShow, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); messageScrollPane.setPreferredSize(new Dimension(400,400)); messageScrollPane.revalidate();showStatus=new JTextField(35);showStatus.setEditable(false);sysMessage=new JTextField(24);sysMessage.setEnabled(false);sysMessageButton=new JButton(); sysMessageButton.setText("发送");//添加系统消息的事件侦听sysMessage.addActionListener(this); sysMessageButton.addActionListener(this); sendToLabel=new JLabel("发送至:"); messageLabel=new JLabel("发送消息:"); downPanel=new JPanel();girdBag=new GridBagLayout();downPanel.setLayout(girdBag);girdBagCon=new GridBagConstraints(); girdBagCon.gridx=0;girdBagCon.gridy=0;girdBagCon.gridwidth=3;girdBagCon.gridheight=2;girdBagCon.ipadx=5;girdBagCon.ipady=5;JLabel none=new JLabel("");girdBag.setConstraints(none,girdBagCon); downPanel.add(none);girdBagCon=new GridBagConstraints(); girdBagCon.gridx=0;girdBagCon.gridy=2;girdBagCon.insets=new Insets(1,0,0,0); girdBagCon.ipadx=5;girdBagCon.ipady=5;girdBag.setConstraints(sendToLabel,girdBagCon); downPanel.add(sendToLabel);girdBagCon=new GridBagConstraints(); girdBagCon.gridx=1;girdBagCon.gridy=2;girdBagCon.anchor=GridBagConstraints.LINE_START; girdBag.setConstraints(combobox,girdBagCon); downPanel.add(combobox);girdBagCon=new GridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=3;girdBag.setConstraints(messageLabel,girdBagCon);downPanel.add(messageLabel);girdBagCon=new GridBagConstraints();girdBagCon.gridx=1;girdBagCon.gridy=3;girdBag.setConstraints(sysMessage,girdBagCon);downPanel.add(sysMessage);girdBagCon=new GridBagConstraints();girdBagCon.gridx=2;girdBagCon.gridy=3;girdBag.setConstraints(sysMessageButton,girdBagCon);downPanel.add(sysMessageButton);girdBagCon=new GridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=4;girdBagCon.gridwidth=3;girdBag.setConstraints(showStatus,girdBagCon);downPanel.add(showStatus);contentPane.add(messageScrollPane,BorderLayout.CENTER);contentPane.add(downPanel,BorderLayout.SOUTH);//关闭程序时的操作this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){stopService();System.exit(0);}});}/***事件处理*/public void actionPerformed(ActionEvent e){Object obj=e.getSource();if(obj==startServer||obj==startItem){//启动服务端startService();}else if(obj==stopServer||obj==stopItem){//停止服务端int j=JOptionPane.showConfirmDialog(this,"真的停止服务吗?","停止服务",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if(j==JOptionPane.YES_OPTION){stopService();}}else if(obj==portSet||obj==portItem){//端口设置//调出端口设置的对话框PortConf portConf=new PortConf(this);portConf.setVisible(true);}else if(obj==exitButton||obj==exitItem){//退出程序int j=JOptionPane.showConfirmDialog(this,"真的要退出吗?","退出",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if(j==JOptionPane.YES_OPTION){stopService();System.exit(0);}}else if(obj==helpItem){//菜单栏中的帮助//调出帮助对话框Help helpDialog=new Help(this);helpDialog.setVisible(true);}else if(obj==sysMessage||obj==sysMessageButton){//发送系统消息sendSystemMessage();}}/***启动服务端*/public void startService(){try{serverSocket=new ServerSocket(port,10);messageShow.append("服务端已经启动,在"+port+"端口侦听...\n");startServer.setEnabled(false);startItem.setEnabled(false);portSet.setEnabled(false);portItem.setEnabled(false);stopServer.setEnabled(true);stopItem.setEnabled(true);sysMessage.setEnabled(true);}catch(Exception e){//System.out.println(e);}userLinkList=new UserLinkList();listenThread=new ServerListen(serverSocket,combobox,messageShow,showStatus,userLinkList);listenThread.start();}/***关闭服务端*/public void stopService(){try{//向所有人发送服务器关闭的消息sendStopToAll();listenThread.isStop=true;serverSocket.close();int count=userLinkList.getCount();int i=0;while(i<count){Node node=userLinkList.findUser(i);node.input.close();node.output.close();node.socket.close();i++;}stopServer.setEnabled(false);stopItem.setEnabled(false);startServer.setEnabled(true);startItem.setEnabled(true);portSet.setEnabled(true);portItem.setEnabled(true);sysMessage.setEnabled(false);messageShow.append("服务端已经关闭\n");combobox.removeAllItems();combobox.addItem("所有人");}catch(Exception e){//System.out.println(e);}}/***向所有人发送服务器关闭的消息*/public void sendStopToAll(){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();}catch(Exception e){//System.out.println("$$$"+e);}i++;}}/***向所有人发送消息*/public void sendMsgToAll(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);node.output.flush();}catch(Exception e){//System.out.println("@@@"+e);}i++;}sysMessage.setText("");}/***向客户端用户发送消息***/public void sendSystemMessage(){String toSomebody=combobox.getSelectedItem().toString();String message=sysMessage.getText()+"\n";messageShow.append(message);//向所有人发送消息if(toSomebody.equalsIgnoreCase("所有人")){sendMsgToAll(message);}else{//向某个用户发送消息Node node=userLinkList.findUser(toSomebody);try{node.output.writeObject("系统信息");node.output.flush();node.output.writeObject(message);node.output.flush();}catch(Exception e){//System.out.println("!!!"+e);}sysMessage.setText("");//将发送消息栏的消息清空}}public static void main(String[]args){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(ClassNotFoundException e){//TODO Auto-generated catch blocke.printStackTrace();}catch(InstantiationException e){//TODO Auto-generated catch blocke.printStackTrace();}catch(IllegalAccessException e){//TODO Auto-generated catch blocke.printStackTrace();}catch(UnsupportedLookAndFeelException e){//TODO Auto-generated catch blocke.printStackTrace();}new ChatServer();}3.1.2ServerListen类ServerListen.java该类实现服务器用户上线与下线的监听。