基于java的多功能聊天室
- 格式:doc
- 大小:356.50 KB
- 文档页数:31
课程名称JAVA Web 应用程序实验名称基于JSP的网络聊天室班级学号姓名一、功能模块:-1.用户注册(注册用户保存在application中)-2.用户登录-3.用户注销-4.留言功能二、要求:- 1.用户注册、登录都要进行客户端检查是否信息为空-2.用户登录之后,服务器端需要检查是否是合法的用户-3.显示的每条信息都包括登录用户姓名、留言内容及留言时间-4.其它内容可以自己扩展三、实验步骤和模块实验总体来说分为三大部分,分别为:用户注册、用户登录和用户留言,其中用户注销为一个小功能,因此不做过多描述1.用户注册首先来介绍第一部分用户注册界面,在该界面中用户填写信息后提交,程序自动将用户姓名和密码保存在application中以便在用户登录时核对信息,源代码为:form.html<html><head><title>Java Web</title><script langguage="JavaScipt">function checkvalid(){var str1=.value;var str2=login.pwd.value;var str3=login.sex.value;var str4=login.pwd.value;var str5=login.pwd2.value;if(str1==""){alert("没有输入用户名");return false;}if(str2==""){alert("没有输入密码");return false;}if(str3==""){alert("没有输入性别");return false;}if(str4!=str5){alert("密码不匹配");return false;}}</script><body><form method="post" action="ex08.jsp" name="login"> <div align="center">name(必须输入项):<input type="text" name="name"><br>passord(必须输入项):<input type="password" name="pwd"><br>passord(重新输入):<input type="password" name="pwd2"><br></div><p align="center">性别(必须输入项):<input Type="Radio" Name="sex" Value="男" Checked>男<input Type="Radio" Name="sex" Value="女">女 </p> <p align="center">户口所在城市</p><p align="center"><select name="City" ><option selected>北京市</option><option>上海市</option><option>天津市</option><option>重庆市</option></select></p><p align="center">曾经居住地</p><p align="center"><select name="juzhu" multiple ><option>北京市</option><option>上海市</option><option>天津市</option><option>重庆市</option></select></p><p align="center">爱好:</p><div align="center"><input type="checkbox" name="JOB" value="上网" >旅游<br><input type="checkbox" name="JOB" value="游戏">游戏<br><input type="checkbox" name="JOB" value="看电影">看电影<br><input type="checkbox" name="JOB" value="看书">看书<br><input type="checkbox" name="JOB" value="听音乐">听音乐<br><input type="checkbox" name="JOB" value="其他">其他<br><p align="center">用户备注信息:</p><p align="center"><textarea name="liuyan" rows="10" cols="30"></textarea></p><div align="center"><input type="reset" name="reset" value="重置"><input type="submit" name="submit" onClick="return checkvalid()" value="提交"></div></form></body></html>值得注意的是,在注册界面一定要完成任务要求,即进行客户端检查是否信息为空,同时密码两次输入是否匹配。
java简单实用小项目实例Java是一种广泛应用于开发各类软件和项目的编程语言,它具有简洁、高效、可靠等特点。
本文将介绍几个简单实用的Java小项目实例,帮助读者巩固和应用Java语言的知识。
1. 学生成绩管理系统学生成绩管理系统是一个常见的小项目,它可以实现对学生信息和成绩的管理和查询。
通过Java语言的面向对象特性,我们可以定义学生类和成绩类,并编写相应的方法来实现学生信息的录入、成绩的录入和查询等功能。
这个项目可以帮助读者熟悉Java的面向对象编程思想和基本语法。
2. 电话号码归属地查询电话号码归属地查询是一个实用的小项目,它可以根据输入的电话号码查询该号码所属的地区。
通过Java语言的网络编程知识,我们可以编写一个简单的客户端程序,通过访问一个公开的电话号码归属地查询API,实现对电话号码归属地的查询。
这个项目可以帮助读者了解Java的网络编程和API的使用。
3. 简易计算器简易计算器是一个常见的小项目,它可以实现基本的加减乘除等运算功能。
通过Java语言的GUI编程知识,我们可以使用Swing或JavaFX等库来创建一个简单的计算器界面,并编写相应的计算逻辑来实现运算功能。
这个项目可以帮助读者熟悉Java的GUI编程和事件处理的基本原理。
4. 文件备份工具文件备份工具是一个实用的小项目,它可以帮助用户将指定目录下的文件备份到指定位置。
通过Java语言的文件操作知识,我们可以编写一个简单的程序,实现对指定目录下的文件进行遍历和复制等操作。
这个项目可以帮助读者了解Java的文件操作和异常处理的基本方法。
5. 网络聊天室网络聊天室是一个有趣的小项目,它可以实现多人在网络上进行实时聊天的功能。
通过Java语言的Socket编程知识,我们可以编写一个简单的服务器程序和客户端程序,实现用户之间的消息收发和显示。
这个项目可以帮助读者了解Java的Socket编程和多线程编程的基本原理。
以上是几个简单实用的Java小项目实例。
Java的聊天机器人开发实现智能客服和个人助手随着人工智能的迅速发展,聊天机器人在日常生活和工作中的应用越来越广泛。
作为一种集成了自然语言处理、机器学习和人机交互等技术的应用程序,聊天机器人可以模拟人类的对话交流,实现智能客服和个人助手等功能。
本文将介绍Java语言下聊天机器人的开发实现,以及如何将其应用于智能客服和个人助手等场景中。
一、聊天机器人的基本原理和核心技术聊天机器人的实现离不开以下几个核心技术:1. 自然语言处理(Natural Language Processing,NLP):用于将人类语言转化为机器可以理解和处理的形式。
NLP技术包括分词、词性标注、命名实体识别、句法分析等。
2. 语音识别和语音合成:通过语音识别技术将语音转化为文本,再通过语音合成技术将文本转化为语音输出。
3. 机器学习和深度学习:通过训练数据,使机器可以学习到诸如语义理解、情感分析等智能能力。
常用的机器学习算法包括决策树、随机森林和支持向量机等。
深度学习算法如循环神经网络(Recurrent Neural Network,RNN)和长短时记忆网络(Long Short-Term Memory,LSTM)在聊天机器人中得到广泛应用。
4. 对话管理:负责处理对话流程、对话状态管理和对话策略等。
对话管理系统可以通过制定对话规则或者机器学习方法进行实现。
二、Java在聊天机器人开发中的应用Java作为一门成熟的面向对象编程语言,广泛应用于企业级应用开发中,也被用于聊天机器人的开发。
以下是Java在聊天机器人开发中的具体应用方式:1. 自然语言处理库的使用:Java提供了许多成熟的自然语言处理库,如NLTK、OpenNLP和Stanford NLP等。
开发者可以使用这些库来处理分词、词性标注、命名实体识别等任务。
2. 机器学习和深度学习的支持:Java拥有丰富的机器学习和深度学习库,例如Weka、DL4J和TensorFlow等。
基于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. In this paper, a more rational design, in WINDOWS platform to achieve integrated in this realization of the client and server in different parallel tasks within a program, multi-threaded. And the design of user-friendly interface, easy to use and very reasonable, and easy expansion and customization. LAN chat system to a specific shared memory data exchange between process and use the windows message mechanism to achieve inter-process synchronization, the two mechanisms used in conjunctionLAN chat room as a new chat tool that can provide the advantages of more timely, reliable, broke the need of outside network access, has a very wide range of development prospects.This article describes a JA V A Programming LAN chat system, a more common solution. TCP mode, text chat, peer-to-peer (C / C) between the client. The system uses the framework of a typical C / S (Client / Server) mode, the program using the Socket (socket) the principle of network communication, and ultimately the transit through the server, text chat, file transfer capabilities, which greatly reduces the difficulty of program development.The system includes landing, chat, friend lists, and server management of several parts. The system needs analysis, system design, the realization of functions strictly follow the idea of software engineering.【Key words】Socket;TCP/IP;C/S;Local Area Network Chat Room目录第1章引言 (1)1.1课题背景 (1)1.2国内外研究现状 (2)1.3主要内容 (3)第2章局域网聊天室系统分析 (4)2.1系统需求分析 (4)2.1.1功能需求 (4)2.1.2系统基本流程图 (4)2.1.3性能要求 (5)2.1.4测试环境规定 (5)2.2可行性研究 (5)2.2.1成本可行性分析 (5)2.2.2技术可行性分析 (5)2.3系统开发环境的分析 (6)2.4数据流图 (6)2.4.1顶层数据流图 (6)2.4.2一层数据流图 (6)第3章系统设计 (7)3.1设计目标 (7)3.2构建开发环境 (7)3.3系统模块流程图 (7)3.4系统功能模块图 (9)第4章基于Eclipse的聊天室的分析与设计 (10)4.1 TCP套接字的运用 (10)4.2 TCP三次握手协议 (11)4.3程序结构 (11)4.3.1多用户在线方案 (11)4.3.2软件框架 (12)4.4代码实现 (12)4.4.1用户登陆模块 (12)4.4.2用户列表模块 (13)4.4.3文本聊天模块 (15)4.4.4文件传输模块 (17)第5章局域网聊天室系统测试 (20)5.1系统测试结果与分析 (20)5.1.1用户登陆以及用户列表 (20)5.1.2文本聊天 (21)5.1.3文件传输功能 (24)5.2本章小结 (25)结束语 (26)参考文献......................................................... .27致谢. (29)第1章引言1.1课题背景近年来,随着全球信息化进程的不断发展,网络的发展也非常迅速。
Java中的聊天机器人开发Java是一种广泛应用于软件开发领域的编程语言,具有可靠性、稳定性和跨平台特性。
随着人工智能技术的发展,聊天机器人在各个领域中得到越来越广泛的应用。
本文将介绍在Java中如何开发一个简单的聊天机器人。
一、准备工作在开始开发之前,我们需要准备以下工具和环境:1. Java开发环境(JDK)首先,确保你已经安装了最新版本的Java开发工具包(JDK),并将其配置到系统的环境变量中。
你可以从官方网站上下载并安装相应的版本。
2. 开发集成环境(IDE)选择一款适合你的开发习惯的集成开发环境(IDE),例如Eclipse、IntelliJ IDEA等。
这些IDE提供了各种功能,方便我们进行代码编写、调试和测试。
3. 聊天机器人开发框架Java中有多个开源的聊天机器人开发框架可供选择,例如ChatterBot、AIML等。
在本文中,我们将使用ChatterBot框架来开发聊天机器人。
二、ChatterBot框架介绍ChatterBot是一个基于人工智能的聊天机器人开发框架,它可以帮助我们快速创建一个智能、能够进行自然语言处理的聊天机器人。
下面是一些常用的ChatterBot框架的特性:1. 训练聊天机器人ChatterBot框架提供了一个训练模块,可以通过对话数据来训练机器人。
这些对话数据可以是从聊天记录中收集到的真实对话,也可以是根据特定领域收集的专有对话数据。
2. 使用预训练模型除了自己训练聊天机器人外,ChatterBot还提供了一些预训练的模型,可以直接使用这些模型进行聊天。
这些预训练的模型是经过大规模训练得到的,可以提供较高的聊天准确率。
3. 多语言支持ChatterBot支持多种语言,包括英语、中文、法语等。
我们可以根据自己的需求选择相应的语言进行开发和应用。
三、开发聊天机器人下面,我们将通过一个简单的示例来演示如何使用ChatterBot框架来开发聊天机器人。
1. 导入依赖首先,在你的Java项目中导入ChatterBot框架的相关依赖。
院系:计算机科学学院专业:年级:课程名称: Java EE学号:姓名:学号:姓名:学号:姓名:学号:姓名:指导教师:2012年 3月 13日4、登录成功界面源代码如下:1、登录页面代码:login.html<!--To change this template, choose Tools | Templatesand open the template in the editor.--><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>欢迎登陆聊天室</title></head><body bgcolor="#FFFFFF" background="D:\java_ee\ChatRoom\images\loginback.jpg"> <h1 align="center"><br> </h1><h1 align="center"><b>欢迎登陆聊天室</b></h1> <form name="login" action="Main" method ="post"><p> </p><table width="52%" border="2" align="center"><tr bgcolor="#00eeee"><td align="center" width="43%"> <div align="center">用户名:</div></td><td width="57%"> <div align="left"><input type="text" name="username"></div></td></tr><tr bgcolor="#00eeee"><td align="center" width="43%"> <div align="center">密码:</div></td><td width="57%"> <div align="left"><input type="password" name="password"></div></td></tr></table><p align="center"><input type="submit" name="Submit2" value="提交"><input type="reset" name="Reset" value="重置"></p></form></body></html>2、判断登录界面main.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package com.servlet;import java.io.*;import .*;import javax.servlet.*;import javax.servlet.http.*;/**** @author huxiao*/public class Main extends HttpServlet {/*** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.* @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=gb2312");request.setCharacterEncoding("gb2312");RequestDispatcher dispatcher;String username=request.getParameter("username");if(username==null)username="";String password=request.getParameter("password");if(password==null)password="";usernameServlet tempMem=new usernameServlet(request.getParameter("username"),request.getParameter("password"));if(tempMem.isMember(getInitParameter("MemFilePath")+"memberInfo.txt")){ //创建会话,将成功登陆后的用户名写入session以便后面使用String name=request.getParameter("username");HttpSession session=request.getSession(true);session.setAttribute("username", name);dispatcher=request.getRequestDispatcher("loginsucess");dispatcher.forward(request, response);}else{dispatcher = request.getRequestDispatcher("loginfail");dispatcher.forward(request, response);}}// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">/*** Handles the HTTP <code>GET</code> method.* @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {processRequest(request, response);}/*** Handles the HTTP <code>POST</code> method.* @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {processRequest(request, response);}/*** Returns a short description of the servlet.* @return a String containing servlet description*/@Overridepublic String getServletInfo() {return "Short description";}// </editor-fold>}3、对用户名和密码的归类usernameServlet.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package com.servlet;import java.io.*;import java.util.HashMap;/*** 成员类* @author Josh*/public class usernameServlet {private String name;private String password;usernameServlet(){name=null;password=null;}usernameServlet(String paraName,String paraPassword){ name=paraName;password=paraPassword;}//赋值函数void setMemName(String Name){name=Name;}void setMemPassword(String Password){password=Password;}//取值函数String getMemName(){return name;}String getMemPassword(){return password;}//打印信息void printMemName(){System.out.print(name);}void printMemPassword(){System.out.print(password);}//通过读取本地成员信息,与自己比较,看自己是否是成员boolean isMember(String filePath) throws FileNotFoundException, UnsupportedEncodingException{BufferedReader file;String tempName,tempPassword; //用于暂存从文件中读取的信息HashMap hashMember=null;//解决读取中文txt错误问题InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath),"gb2312");file=new BufferedReader(isr);try{while((tempName=file.readLine())!=null){tempPassword=file.readLine();if(hashMember==null) //哈希表不存在时才new一个新的hashMember=new HashMap();hashMember.put(tempName,tempPassword);}file.close();}catch(IOException e){System.out.print("读取数据错误!");}if(hashMember.containsKey(name)){if(password.equals(hashMember.get(name))){System.out.print("登录成功!");return true;}else{System.out.print("密码错误,请重新输入密码!");return false;}}else{System.out.print("此用户不存在,请重新输入!");return false;}}}4、登录成功sucesslogin.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package com.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.*;import javax.servlet.http.*;/**** @author huxiao*/public class loginsucess extends HttpServlet {protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //TODO Method stub generated by Lombozresponse.setContentType("text/html;charset=gb2312");String name=request.getParameter("username");HttpSession session=request.getSession();String history =(String)getServletContext().getAttribute("Counter");if(history==null)history="0";String temp =(String)getServletContext().getAttribute("online");if(temp==null)temp="0";PrintWriter out = response.getWriter();try{out.println("<meta http-equiv=\"refresh\" content=\"10\" url=response.encodeURL(\"ChatRoom\")>");out.println("<html><head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\"> <title>聊天室"+"</title></head>");out.println("<body bgcolor=\"#FFFFFF\" background=\"D:\\java_ee\\ChatRoom\\images\\mainback.jpg\">");out.println("<h2 align=\"center\"><blink>欢迎来到聊天室"+"</blink><h2>");out.println("<marquee bgcolor=#00aabb behavior=alternate><<<<<<<<希望大家聊的开心>>>>>>>"+"</marquee>");out.println ("<h4>在线人数:"+temp+"<br>"+"历史访问次数:"+history+"</h4>");out.println("<p>");String tempHistory=(String)getServletContext().getAttribute("getmessage");if(tempHistory==null)tempHistory="\r\n";out.println("<textarea cols=\"70\" rows=\"23\" name=\"getmessage\"style=\"overflow:auto background-color:BFCEDC\">"+tempHistory+"</textarea>");out.println();out.println("</p>");out.println("<p >");out.println("<form name=\"form\" action=\"outservlet\" method=\"get\">");out.println("<textarea cols=\"70\" rows=\"8\" style=\"#b1b1b1\"name=\"setmessage\">");out.println("</textarea><br>");out.println("<input align=\"center\" type=\"submit\" name=\"tj\" value=\"发送\">");out.println("<input align=\"center\" type=\"reset\" name=\"qx\" value=\"取消\">");out.println("</p>");out.println("</form></body></html>");}finally{out.close();}}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {processRequest(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session=request.getSession();String user=request.getParameter("username");session.setAttribute("user", request.getParameter("username"));processRequest(request,response);}}5、登录失败faillogin.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package com.servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;/**** @author huxiao*/public class loginfail extends HttpServlet {protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //TODO Method stub generated by LombozdoPost(request,response);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //TODO Method stub generated by Lombozresponse.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();out.println("<html>");out.println("<head>");out.println("<title>");out.println("登录失败");out.println("</title>");out.println("</head>");out.println("<body>");out.println("登录失败!!!请重新登录。
聊天室系统的设计与实现Design and Implementation ofChatroo System学院名称:计算机科学与信息工程学院专业班级:软件工程一班学生姓名:学号:指导教师姓名:指导教师职称:2014年5 月目录摘要 (1)引言 (3)第1章绪论 (4)1.1课题背景 (4)1.2国内外研究情况 (4)1.3本课题研究的主要内容、目的和意义 (4)1.3.1本课题研究的主要内容 (4)1.3.2本课题研究的主要目的 (4)1.3.3本课题研究的主要意义 (5)1.4可行性研究 (5)1.4.1 技术可行性 (5)1.4.2 经济可行性 (6)1.4.3运行可行性 (6)第2章系统开发技术、开发工具简介 (6)2.1 JSP简介 (6)2.2 Servlet简介 (6)2.3 MyEclipse 简介 (6)第3章系统需求分析 (7)3.1 系统目标 (7)3.2 系统具备的特点 (7)第4章系统的设计和实现 (7)4.1系统分析 (7)4.2总体设计 (8)4.3 系统详细设计流程 (8)4.4 功能实现 (10)第5章系统测试 (13)5.1 功能测试 (13)5.2 测试目的 (13)5.2.1 测试环境 (13)5.2.2 基本测试过程 (13)5.3测试总结 (13)结论 (14)参考文献 (14)聊天室系统的设计和实现摘要:本文主要阐述了聊天室系统的开发方法以及实现的功能。
本系统采用JSP 技术作为创建应用程序的方式,以JAVA作为编程语言,采用Servlet技术编写。
本系统可以实现任意两个登录用户之间进行对话通信,并且可以进行字体和表情的选择,丰富了通信内容。
关键词JSP; Servlet; 聊天室引言随着Internet的普及和宽带网络技术的成熟,越来越多的用户进入到网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效。
与此同时,一个新型的Web应用程序为网民之间提供了一个即时互通信息的功能和场所,这就是聊天室。
/**建数据库*/if EXISTS(select*from sysdatabases where name='ChatRoom')drop database ChatRoomcreate database ChatRoomon primary(name='ChatRoom_data',filename='F:\JAVA\JAVA高级\聊天室\Data\ChatRoom_data.mdf',size= 5mb,maxsize= 100mb,filegrowth= 15%)log on(name='ChatRoom_log',filename='F:\JAVA\JAVA高级\聊天室\Data\ChatRoom_data.ldf',size= 2mb,filegrowth= 1mb)gouse ChatRoomGO/**建表*/drop table chatMsgcreate table chatMsg(msg_id int identity (1,1),client_IP varchar(20),client_msg varchar(500))/**创建存储过程*/if exists(select*from sysobjects where name='p_chatMsg_Add') drop proc p_chatMsg_Addgocreate proc p_chatMsg_Add@sIP varchar(20),@sMsg varchar(500)asbegininsert into chatMsg(client_IP,client_msg)values (@sIP,@sMsg) endselect*from chatMsgpackage .ChatRoomServer;import java.util.ArrayList;public class Broadcast implements Runnable {ArrayList<Commiuncation> clientList;ArrayList<Commiuncation> clientOtherList;@Overridepublic void run() {// 广播while (true) {try {checkCommIsUnline(); //检查是否下线broadcast(); //调用广播方法Thread.sleep(200);} catch (Exception e) {// e.printStackTrace();}}}/*** 检查是否下线*/public void checkCommIsUnline(){for(Commiuncation comm:clientList){ //遍历clientList集合if(comm.bStop){clientList.remove(comm); //移除客户端通信对象clientOtherList.remove(comm);continue;}}}//客户端消息集合,获取每个人的消息public Broadcast(ArrayList<Commiuncation> clientList) {this.clientList = clientList;this.clientOtherList = clientList;/*** 广播方法* @throws Exception*/private void broadcast() throws Exception {if (clientList == null || clientList.size() == 0) { //判断集合是否为空return;}//找到所有消息for (Commiuncation comm : clientList) {if (comm == null || comm.clientMsgList == null|| comm.clientMsgList.size() == 0) {continue;}for (String sMsg : comm.clientMsgList) {if (clientOtherList == null || clientOtherList.size() == 0) {continue;}//发送消息给其他人for (Commiuncation commOther : clientOtherList) {if (commOther == null) {continue;}if (commOther != comm) {//调用发送信息方法commOther.SendMsg(comm.socket.getInetAddress()+ "说:" + sMsg);}}}comm.clientMsgList.removeAllElements(); //清空所有消息记录}}}package .ChatRoomServer;import java.io.DataInputStream;import java.io.DataOutputStream;import .Socket;import java.sql.Types;import java.util.Vector;** @author Administrator**/public class Commiuncation implements Runnable {Socket socket = null;DataInputStream dis = null;DataOutputStream dos = null;Vector<String> clientMsgList = new Vector<String>();//储存当前客户端对象的消息(泛型)public boolean bStop = false; //判断是否停止下线/*** 下线* @throws Exception*/public void stop() throws Exception{ //stop()方法bStop = true;System.out.println(socket.getInetAddress()+"下线了");dos.close();dis.close();socket.close(); //关闭socket}public Commiuncation(Socket socket) {this.socket = socket; //当前通信对象}@Overridepublic void run() {while (!bStop) {try {ReciveMsg(); //调用接收信息Thread.sleep(200);} catch (Exception e) {System.out.println(socket.getInetAddress()+"下线了");if(!bStop){try {stop(); //调用下线方法} catch (Exception e1) {}}}}}/*** 接收消息* @throws Exception*/public void ReciveMsg() throws Exception { //接收信息的方法dis = new DataInputStream(socket.getInputStream());String sData = dis.readUTF();System.out.println("客户端说:"+sData);if (sData != null) {if("bye".equals(sData)){sData = socket.getInetAddress()+"下线了";stop();}clientMsgList.add(sData);}try{DBHelp.getSqlServerConn(); //调用DBHelp方法连接数据库String[] paramValues = {socket.getInetAddress().toString(),sData}; //客户端地址,消息记录集合DBHelp.execProcedure("{?=call p_chatMsg_Add(?,?)}", Types.INTEGER, paramValues);//调用数据库中的存储过程DBHelp.closeDB(); //关闭数据库}catch(Exception e){System.out.println("保存记录失败");}}/*** 发送消息* @param msg* @throws Exception*/public void SendMsg(String msg) throws Exception { //此方法可在广播时调用dos = new DataOutputStream(socket.getOutputStream());dos.writeUTF(msg);dos.flush();}}package .ChatRoomServer;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class DBHelp {//接口static Connection conn;static Statement stmt;static ResultSet rs;static CallableStatement cstmt;static final String SQL_URL = "jdbc:sqlserver://localhost:1433;DatabaseName=ChatRoom;user=sa;password=123";/*** 连接数据库* @throws Exception*/public static void getSqlServerConn() throws Exception {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//连接到数据库conn = DriverManager.getConnection(SQL_URL); //加载驱动stmt = conn.createStatement();}/*** 执行存储过程* @param sql* @param returnType* @param paramValues* @return* @throws Exception*/public static int execProcedure(String sql, int returnType,String[] paramValues) throws Exception {int iFlag = 0;cstmt = conn.prepareCall(sql);if (returnType != -1) {cstmt.registerOutParameter(1, returnType);}if (paramValues != null && paramValues.length > 0) {for (int i = 0; i < paramValues.length; i++) {cstmt.setString(i + 2, paramValues[i]);}}cstmt.executeUpdate();if (returnType != -1) {iFlag = cstmt.getInt(1);}return iFlag;}/*** 关闭数据库* @throws Exception*/public static void closeDB() throws Exception { //关闭数据库的方法if (rs != null) { //如果结果集不为空,就关闭rs.close();rs = null;}if (cstmt != null) {cstmt.close();cstmt = null;}if (stmt != null) {stmt.close();stmt = null;}if (conn != null) {conn.close();conn = null;}}}package .ChatRoomServer;import .ServerSocket;import .Socket;import java.util.ArrayList;public class Server implements Runnable {private static final int PORT = 9999; //指定默认端口(常量不可改)protected static ServerSocket serversocket = null; //静态main方法需静态变量protected Socket socket = null; //一个客户端需一个socketArrayList<Commiuncation> clientList = new ArrayList<Commiuncation>(); //客户端消息集合Commiuncation comm = new Commiuncation(socket); //指定一个新的通信对象public static void main(String[] args) {System.out.println("欢迎使用聊天室");try {serversocket = new ServerSocket(PORT);DBHelp.getSqlServerConn(); //调用DBHelp的getSqlServerConn连接数据库new Thread(new Server()).start(); //启动服务线程System.out.println("服务器已启动...");} catch (Exception e) {System.out.println("服务器启动失败");}}@Overridepublic void run() {while(true){try {listener(); //使用循环,不断监听客户端// return;} catch (Exception e) {e.printStackTrace();}// finally{// System.out.println("A");// }}}/*** 监听端口* @throws Exception*///封装方法,方便调用private void listener() throws Exception {socket = serversocket.accept(); //接收客户端连接String sMsg = socket.getInetAddress()+"已上线...";System.out.println(sMsg); //输出上线消息Commiuncation comm = new Commiuncation(socket);comm.clientMsgList.add(sMsg); //添加信息到clientMsgList集合中clientList.add(comm); //添加客户端消息到clientList集合中new Thread(comm).start(); //启动一个新的线程Thread.sleep(200);new Thread(new Broadcast(clientList)).start(); //启动广播线程,广播消息}}。
辽 宁 科 技 大 学 新技术专题报告
设计题目: 基于java的多功能聊天室 学院、系: 电子与信息工程学院 专业班级: 计算机科学与技术09.1班 学生姓名: 张栋 指导教师: 龙艳彬、滕薇 成 绩:
2012 年 06 月 30 日 2
第一章 绪论 ................................................................................................................................................... 3 1.1 聊天室系统的基本概念 ............................................................................................................... 3 1.2 开发聊天室系统的意义 ............................................................................................................... 3 1.3系统开发环境与工具的选择 .......................................................................................................... 3 1.3.1 Java语言 ............................................................................................................................. 3 1.3.2 本课题开发环境的选择 ................................................................................................... 4 1.3.3本课题开发工具的选择 ...................................................................................................... 5 1.3.4 本课题开发技术的选择 ..................................................................................................... 6 第二章 需求分析 ........................................................................................................................................... 7 2.1 聊天室系统作为网络通讯工具的作用 ....................................................................................... 7 2.2 现行聊天室系统的功能需求 ......................................................................................................... 7 2.2.1 用户登入 ............................................................................................................................. 7 2.2.2 聊天记录 ............................................................................................................................. 8 2.2.4 用户退出 ............................................................................................................................. 8 2.3 质量性能需求 ............................................................................................................................... 9 2.3.1 容错性需求 ......................................................................................................................... 9 2.3.2 稳定性需求 ......................................................................................................................... 9 2.3.3 软件设计可靠性 ................................................................................................................. 9 2.3.4 安全性 ................................................................................................................................. 9 2.3.5 扩展性 ................................................................................................................................. 9 2.3.6 易用性 ................................................................................................................................. 9 第三章 聊天室系统的总体设计 ................................................................................................................. 10 3.1 聊天室结构分析 ......................................................................................................................... 10 第四章 各模块功能及主要模块的流程图 .................................................................................................. 11 4.1 各模块功能简介 ............................................................................................................................. 11 第五章 系统测试 ......................................................................................................................................... 23 5.1 测试举例 ..................................................................................................................................... 23 5.1.1 测试程序登录界面 ........................................................................................................... 23 5.1.2 测试程序主界面 ............................................................................................................... 23 5.1.3 测试程序退出 ................................................................................................................... 23 5.2 测试项目 ..................................................................................................................................... 23 5.2.2 组合测试 ........................................................................................................................... 24 5.3 测试方法 ..................................................................................................................................... 24 第六章 结 论 ............................................................................................................................................... 29 致 谢 ............................................................................................................................................................ 30 参考文献....................................................................................................................................................... 31