网络聊天室课程设计报告(内附java代码)
java课程设计报告(java聊天室)
Java聊天室课程设计一、需求分析1.1开发背景在信息化社会的今天,网络飞速发展,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似MSN、QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的想法,且通过制作该程序还能更好的学习网络软件编程知识。
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。
网编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。
在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。
而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。
目前较为流行的网络编程模型是客户机/服务器(C/S)结构。
即通信双方一方作为服务器等待客户提出请求并予以响应。
客户则在需要服务时向服务器提出申请。
服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也得到响应的服务。
1.2设计要求本课程设计的目标是利用套接字socket()设计一个聊天程序,该程序基于C/S模式,客户机器向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。
1.3设计目的通过设计一个网络聊天程序,对套接字、数据报通讯、URL、与URLConnectiom的相关知识有详细的了解和充分的认识。
能将相关的只是运用到相关的实践中去。
1.4功能实现服务器的主要功能有1)在特定端口上进行侦听,等待客户连接2)用户可以配置服务器的真挺端口3)向已经连接服务器的客户发送系统消息4)统计在线人数5)当停止服务时,断开所有用户的连接客户端的主要功能1)连接到已经开启聊天服务的服务端2)用户可以配置要连接服务器端的ip地址和端口号3)用户可以配置连接后显示的用户名4)当服务器开启时。
java网络聊天室课程设计报告(内附代码)之欧阳歌谷创作
课程设计欧阳歌谷(2021.02.01)网络聊天室院(系) 别信电学院班级计算102学号姓名指导教师时间418—510课程设计任务书题目网络聊天室课程设计系 (部) 信电学院专业计算机科学与技术班级计算102学生姓名学号4月 18 日至 5 月 10 日共 4 周指导教师(签字)系主任(签字)年月日成绩评定表目录课程设计概述21.1问题描述21.2功能需求分析21.3环境需求分析2学生信息管理系统软件总体设计22.1整体思路22.2总体设计流程图3学生信息管理软件详细设计43.1.界面设计43.2通信功能实现方法6参考文献36摘要私達の実践の能力を高めるため、学んだ知識を運用することができて行って更に創造して、学校は特に2週間手配して、私達にVisual C++の課程の設計の実習を行わせます.このファイルの詳しい説明はVisual C++6.0環境の下で、1つのソフトウェアの過程を設計して、このソフトウェアは各種のデータの個数を統計したのです。
このソフトウェアの機能は、ユーザーは1段の文字を入力して、ソフトウェアは文字の中の各類のデータの数を記録して、英文のデータの数、数字のデータの数、空欄のデータの数とそれのタイプのデータの数を含んで、そしてそれらを明らかに示します.以下、課程を通して説明を設計して、データはソフトウェアの説明を統計して、プログラムは説明を調整して、総括などの方面を開発して、詳しくこのプログラムの製作の過程を説明して、作用、各種の実行することができる操作.关键字:データの統計,VC++6.0, ヘッドファイル课程设计概述1.1问题描述`随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。
因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。
Java局域网聊天程序课程设计(含代码)
JAVA聊天室的系统的设计与开发1.主要内容:用JA V A实现基于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课程设计报告聊天室一、课程目标知识目标:1. 学生能理解网络编程的基本概念,掌握JAVA Socket编程的基础知识。
2. 学生能运用面向对象编程思想,设计并实现聊天室客户端与服务器的数据传输功能。
3. 学生了解并掌握多线程技术在网络编程中的应用。
技能目标:1. 学生能运用所学知识,独立编写并调试简单的聊天室程序。
2. 学生具备分析问题、解决问题的能力,能针对聊天室程序进行优化和改进。
3. 学生能在团队协作中发挥自己的作用,与他人共同完成一个完整的网络编程项目。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣,增强学习JAVA的自信心。
2. 学生认识到团队合作的重要性,培养良好的团队协作精神。
3. 学生通过编程实践,体验创新与创造的乐趣,培养积极向上的学习态度。
本课程针对高年级学生,结合课本内容,注重理论与实践相结合,以提高学生的实际编程能力为主要目标。
课程要求学生在掌握基本知识的基础上,能够独立完成实际项目,培养其分析问题、解决问题的能力。
同时,课程强调团队协作,使学生学会与他人共同进步,共同成长。
通过本课程的学习,使学生达到知识、技能和情感态度价值观的全面提升。
二、教学内容1. 网络编程基础理论:介绍网络编程的基本概念,包括IP地址、端口号、协议等,使学生理解网络通信的基本原理。
- 教材章节:第三章 网络编程基础2. JAVA Socket编程:讲解Socket编程的原理,指导学生掌握客户端与服务器之间的数据传输方法。
- 教材章节:第四章 Socket编程3. 面向对象编程:运用面向对象编程思想,设计聊天室程序,包括类的定义、封装、继承与多态。
- 教材章节:第二章 面向对象编程基础4. 多线程技术:介绍多线程编程的概念,分析在聊天室程序中如何实现多用户并发通信。
- 教材章节:第五章 多线程编程5. 聊天室程序设计与实现:指导学生完成聊天室客户端与服务器的编写,实现基本的功能需求。
java课程设计---java聊天室的系统的设计与开发(含代码)-java
Java程序课程设计任务书JAVA聊天室的系统的设计与开发1.主要内容:用JA V A实现基于C/S模式的聊天室系统。
聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。
(包括技术要求等):系统的功能要求::,等待客户端连接。
,默认端口为8888。
,断开所有的用户连接。
:。
,用户可以随时登录和注销。
学习并掌握一下技术:Java JavaBean 等熟练使用一下开发工具:Eclipse,JCreator 等实现系统上述的功能。
:5月20日~ 5月21日:课程设计选题,查找参考资料5月22日~ 5月23日:完成系统设计5月24日~ 5月27日:完成程序代码的编写5月28日:系统测试与完善5月29日:完成课程设计报告,准备答辩4.主要参考文献:[1].张广彬孟红蕊(案例精编)[M].摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。
基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。
一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。
本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。
系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。
使用JAVA语言编写,开发工具采用Eclipse。
服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。
java网络聊天室课程设计报告(内附代码)之欧阳数创编
课程设计网络聊天室院(系) 别信电学院班级计算102学号姓名指导教师时间2013-4-18—2013-5-10课程设计任务书题目网络聊天室课程设计系 (部) 信电学院专业计算机科学与技术班级计算102学生姓名学号4月 18 日至 5 月 10 日共 4 周指导教师(签字)系主任(签字)年月日成绩评定表目录摘要私達の実践の能力を高めるため、学んだ知識を運用することができて行って更に創造して、学校は特に2週間手配して、私達にVisualC++の課程の設計の実習を行わせます.このファイルの詳しい説明はVisual C++6.0環境の下で、1つのソフトウェアの過程を設計して、このソフトウェアは各種のデータの個数を統計したのです。
このソフトウェアの機能は、ユーザーは1段の文字を入力して、ソフトウェアは文字の中の各類のデータの数を記録して、英文のデータの数、数字のデータの数、空欄のデータの数とそれのタイプのデータの数を含んで、そしてそれらを明らかに示します.以下、課程を通して説明を設計して、データはソフトウェアの説明を統計して、プログラムは説明を調整して、総括などの方面を開発して、詳しくこのプログラムの製作の過程を説明して、作用、各種の実行することができる操作.关键字:データの統計,VC++6.0, ヘッドファイル课程设计概述1.1问题描述`随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。
因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。
因此出现了QQ等聊天工具,然而QQ等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。
目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中大部分都是绝对的C/S模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。
JAVA课程设计实验报告-“聊天室”报告
第二章 聊天室的设计
2.1聊天室的粗略设计分析
聊天系统平台应有两个部分组成:服务端和客户端。服务端主要完成用户信息的存储、客户端命令的接受与响应以及发送系统消息、信息转发、踢人等服务端应有的功能。客户端主要完成聊天信息的发送与接受、登录、注销等功能。
此c/s系统使用的是TCP/IP协议,应用了如下通讯模式:
如果用户名和密码正确的话,则登录聊天室主界面;如果已经在线,则输出已经在线;否则输出用户名和密码错误,需要重新登录或者注册。
在线用户列表
用户登录之后,需要知道系统中,有哪些用户在线,这样可以方便用户选择与个别用户私聊和传送文件,也可以进行公聊。
用户公聊
用户输入的用户名和密码都正确后,则进入聊天室。聊天主界面主要由四大版块组成:公聊的聊天信息、在线用户列表、好友列表,系统消息和聊天的一些操作。
1.2聊天室的基本功能-------------------------------------------------------------3
1.3设计所用参考资料-------------------------------------------------------------6
第二章 聊天室的设计-------------------------------------------6
由于Client使用了流套接字,所以服务程序也要使用流套接字。这就要创建一个ServerSocket对象,接下来服务程序进入无限循环之中,无限循环从调用ServerSocket的accept()方法开始,在调用开始后accept()方法将导致调用线程阻塞直到连接建立。在建立连接后accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。由于存在单个服务程序与多个客户程序通讯的可能,服务程序循环检测是否有客户连接到服务器上,如果有,则创建一个线程来服务这个客户,以此完成对客户端的监听。
java网络聊天室课程设计报告(内附代码)
课程设计网络聊天室院(系) 别信电学院班级计算102学号姓名指导教师时间 2013-4-18—2013-5-10 课程设计任务书题目网络聊天室课程设计系 (部) 信电学院专业计算机科学与技术班级计算102学生姓名学号4 月 18 日至5 月 10 日共 4 周指导教师(签字)系主任(签字)年月日成绩评定表目录课程设计概述 (3)1.1问题描述 (3)1.2功能需求分析 (3)1.3环境需求分析 (3)学生信息管理系统软件总体设计 (4)2.1整体思路 (4)2.2总体设计流程图 (5)学生信息管理软件详细设计 (6)3.1.界面设计 (6)3.2通信功能实现方法 (8)参考文献 (44)摘要私達の実践の能力を高めるため、学んだ知識を運用することができて行って更に創造して、学校は特に2週間手配して、私達にVisual C++の課程の設計の実習を行わせます.このファイルの詳しい説明はVisual C++6.0環境の下で、1つのソフトウェアの過程を設計して、このソフトウェアは各種のデータの個数を統計したのです。
このソフトウェアの機能は、ユーザーは1段の文字を入力して、ソフトウェアは文字の中の各類のデータの数を記録して、英文のデータの数、数字のデータの数、空欄のデータの数とそれのタイプのデータの数を含んで、そしてそれらを明らかに示します.以下、課程を通して説明を設計して、データはソフトウェアの説明を統計して、プログラムは説明を調整して、総括などの方面を開発して、詳しくこのプログラムの製作の過程を説明して、作用、各種の実行することができる操作.关键字:データの統計,VC++6.0, ヘッドファイル课程设计概述1.1问题描述`随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。
Java课程设计聊天室(含代码)【范本模板】
Java程序课程设计任务书JAVA聊天室的系统的设计与开发1.主要内容:用JA V A实现基于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平台上,系统的设计使用了面向对象技术和面向对象的设计原则.系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。
Java简易聊天工具课程设计报告及代码
J a v a网络编程实践课程设计说明书课程名称:Java网络编程课程设计_题目:__基于C/S的班级聊天室(群聊)工具姓名:____HJC_____学号:201211012 201211006教学班号:软件工程1201班指导教师:xxx_______x x x x x x软件科学与工程系二○一三年十二月二十二日Java网络编程实践任务书目的:熟悉JA V A 语法,掌握图形化界面、多线程、网络、数据库等综合编程,掌握用编程语言开发由若干功能组成的小型项目的基本流程,增强动手实践能力,巩固和加强书本知识的学习,体会JA V A编程的特点。
题目1:基于C/S的班级即时通讯工具(2人)要求:1.C/S模式,基于Socket实现,服务器端用多线程来处理同时多个客户端连接。
2.数据存储:服务器端存储最少一个班级的信息;最好多个班级,主要存储班级若干学生的基本信息。
用数据库存储。
下面所有功能只考虑一个班是基本实现,考虑多个班是拓展实现。
3.界面:GUI界面,友好直观,布局合理,方便的功能入口。
4.功能:1)登陆输入用户名和密码;用户名是学号,有初始密码,例如111111;2)登陆验证根据服务器端存储的班级信息,对输入的用户进行验证,看是否存在于该班(只考虑一个班的情况)。
或是否是某个班的学生(多个班的情况)。
验证通过进入主界面,否则给出错误提示。
3)主界面列出该学生好友列表(同班级同学默认全是该生好友,如果是多个班则可以添加别班好友并经对方批准)。
4)即时聊天,选中某个好友,双击打开窗口聊天。
如果不在线则服务器等对方上线后转发(此功能属拓展实现)。
5)可以修改自己的登陆密码。
6)题目2:基于C/S的班级聊天室(群聊)工具(2人)要求:1.C/S模式,基于Socket实现,服务器端用多线程来处理同时多个客户端连接。
2.数据存储:服务器端存储一个班级的信息;主要存储班级若干学生的基本信息。
用数据库存储。
3.界面:GUI界面,友好直观,布局合理,方便的功能入口。
java课程设计报告(java聊天室)
java课程设计报告(java聊天室)Java聊天室课程设计一、需求分析1.1开发背景在信息化社会的今天,网络飞速发展,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似MSN、QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的想法,且通过制作该程序还能更好的学习网络软件编程知识。
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。
网编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。
在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP 地址可以唯一地确定Internet上的一台主机。
而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。
目前较为流行的网络编程模型是客户机/服务器(C/S)结构。
即通信双方一方作为服务器等待客户提出请求并予以响应。
客户则在需要服务时向服务器提出申请。
服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也得到响应的服务。
1.2设计要求本课程设计的目标是利用套接字socket()设计一个聊天程序,该程序基于C/S模式,客户机器向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。
1.3设计目的通过设计一个网络聊天程序,对套接字、数据报通讯、URL、与URLConnectiom的相关知识有详细的了解和充分的认识。
能将相关的只是运用到相关的实践中去。
1.4功能实现聊天室共分为客户端和服务端两部分,服务器程序主要负责侦听客户端发来的消息,客户端需要登录到相应的服务器才可以实现正常的聊天功能。
服务器的主要功能有1)在特定端口上进行侦听,等待客户连接2)用户可以配置服务器的真挺端口3)向已经连接服务器的客户发送系统消息4)统计在线人数5)当停止服务时,断开所有用户的连接客户端的主要功能1)连接到已经开启聊天服务的服务端2)用户可以配置要连接服务器端的ip地址和端口号3)用户可以配置连接后显示的用户名4)当服务器开启时。
网络聊天室课程设计报告(内附java代码)
课程设计网络聊天室院 (系) 别信电学院班级计算102学号姓名指导教师时间2013-4-18—2013-5-10课程设计任务书题目网络聊天室课程设计系(部)信电学院专业计算机科学与技术班级计算 102学生姓名学号4月 18日至5月10日共 4 周指导教师 (签字 )系主任(签字)年月日一、设计内容及要求二、设计原始资料1)电子工业出版社《JSP实用教程》,郑阿奇编著2)电子工业出版社《JAVA程序设计实用教程》,叶核亚编著三、设计完成后提交的文件和图表1.计算说明书部分JSP界面设计2.图纸部分:程序流程图四、进程安排五、主要参考资料1)电子工业出版社《JSP实用教程》,郑阿奇编著2)电子工业出版社《JAVA程序设计实用教程》,叶核亚编著考资料成绩评定表作品成绩报告成绩口试(答辩)总评成绩成绩目录课程设计概述 (2)1.1 问题描述 (2)1.2 功能需求分析 (2)1.3 环境需求分析 (2)学生信息管理系统软件总体设计 (3)2.1 整体思路 (3)2.2 总体设计流程图 (4)学生信息管理软件详细设计 (5)3.1.界面设计 (5)3.2 通信功能实现方法 (7)参考文献 .....................................................................................................................................................................................错误!未定义书签。
课程设计概述1.1 问题描述`随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。
因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。
java网络聊天室课程设计报告(内附代码)
课程设计网络聊天室院(系) 别信电学院班级计算102学号姓名指导教师时间2013-4-18—2013-5-10 课程设计任务书题目网络聊天室课程设计系(部) 信电学院专业计算机科学与技术班级计算102学生姓名学号4 月18 日至5 月10 日共 4 周指导教师(签字)系主任(签字)年月日成绩评定表目录课程设计概述 (3)1.1问题描述 (3)1.2功能需求分析 (3)1.3环境需求分析 (3)学生信息管理系统软件总体设计 (4)2.1整体思路 (4)2.2总体设计流程图 (5)学生信息管理软件详细设计 (6)3.1.界面设计 (6)3.2通信功能实现方法 (8)参考文献 (44)摘要私達の実践の能力を高めるため、学んだ知識を運用することができて行って更に創造して、学校は特に2週間手配して、私達にVisual C++の課程の設計の実習を行わせます.このファイルの詳しい説明はVisual C++6.0環境の下で、1つのソフトウェアの過程を設計して、このソフトウェアは各種のデータの個数を統計したのです。
このソフトウェアの機能は、ユーザーは1段の文字を入力して、ソフトウェアは文字の中の各類のデータの数を記録して、英文のデータの数、数字のデータの数、空欄のデータの数とそれのタイプのデータの数を含んで、そしてそれらを明らかに示します.以下、課程を通して説明を設計して、データはソフトウェアの説明を統計して、プログラムは説明を調整して、総括などの方面を開発して、詳しくこのプログラムの製作の過程を説明して、作用、各種の実行することができる操作.关键字:データの統計,VC++6.0, ヘッドファイル课程设计概述1.1问题描述`随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。
因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计网络聊天室院(系) 别信电学院班级计算102学号姓名指导教师时间2013-4-18—2013-5-10课程设计任务书题目网络聊天室课程设计系(部) 信电学院专业计算机科学与技术班级计算102学生姓名学号4 月18 日至5 月10 日共 4 周指导教师(签字)系主任(签字)年月日成绩评定表目录课程设计概述 (1)1、1问题描述 (1)1、2功能需求分析 (1)1、3环境需求分析 (1)学生信息管理系统软件总体设计 (2)2、1整体思路 (2)2、2总体设计流程图 (2)学生信息管理软件详细设计 (3)3、1、界面设计 (3)3、2通信功能实现方法 (6)参考文献........................................................................................................错误!未定义书签。
课程设计概述1、1问题描述`随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的与好友取得联系,已经成为当今社会人们主流的联系方式。
因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。
因此出现了QQ等聊天工具,然而QQ等聊天工具虽然方便、实用,但就是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,就是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。
目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中大部分都就是绝对的C/S模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。
为此,我决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流。
避免了服务器忙或与服务器无法连接时,浪费过多时间用于与服务器建立连接。
因此,这个软件就是极具适应性与实用性的即时通讯软件。
1、2功能需求分析实现网络聊天的功能,采用Windows Socket(或Java Socket)编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,可将所有信息发往服务器端,再由服务器进行处理,服务器端就是所有信息的中心。
服务器端要保存用户信息,可利用数据库来实现这一功能,需要建立用户信息数据库。
在客户端可采用文件系统保存聊天纪录与用户号码。
可通过闪动托盘图标与播放不同的音乐提示信息到来及好友上线等信息。
可通过建立消息链表来保存用户接收的各种消息。
1、3环境需求分析运行环境:Windows 9x、2000、XP、Windows 7必要环境:JDK 1、6以上、eclipse开发环境硬件环境:CPU 400MHz以上,内存512MB以上学生信息管理系统软件总体设计2、1整体思路服务器界面3、1、2客户端界面设计登陆界面注册界面聊天室界面3、2通信功能实现方法列举部分实现通信功能的主要代码AppServer、java文件public class AppServer extends Thread {private ServerSocket serverSocket;private ServerFrame sFrame;private static Vector userOnline = new Vector(1, 1);private static Vector v = new Vector(1, 1);/*** 创建服务器启动服务监听1001端口**/public AppServer() {sFrame = new ServerFrame();try {serverSocket = new ServerSocket(1001);// 获取服务器的主机名与IP地址InetAddress address = InetAddress、getLocalHost();sFrame、txtServerName、setText(address、getHostName());sFrame、txtIP、setText(address、getHostAddress());sFrame、txtPort、setText("1001");} catch (IOException e) {fail(e, "不能启动服务!");}sFrame、txtStatus、setText("已启动、、、");this、start(); // 启动线程}/*** 退出服务器** @param e* 异常* @param str* 退出信息*/public static void fail(Exception e, String str) {System、out、println(str + " 。
" + e);}/*** 监听客户的请求,当有用户请求时创建 Connection线程*/public void run() {try {while (true) {// 监听并接受客户的请求Socket client = serverSocket、accept();new Connection(sFrame, client, userOnline, v); // 支持多线程// System、out、println("userLength:"+userLength);}} catch (IOException e) {System、out、println("不能监听");}}/*** 启动服务器*/public static void main(String args[]) {new AppServer();}}ServerFrame、java文件public class ServerFrame extends JFrame implements ActionListener {public JList list;/****/private static final long serialVersionUID =-8936397327038098620L;// 服务器信息面板JPanel pnlServer, pnlServerInfo;JLabel lblStatus, lblNumber, lblMax, lblServerName, lblProtocol, lblIP,lblPort, lblLog;public JTextField txtStatus, txtNumber, txtMax, txtServerName, txtProtocol, txtIP,txtPort;JButton btnStop, btnSaveLog;public TextArea taLog;JTabbedPane tpServer;public TextArea taMessage;// 用户信息面板JPanel pnlUser;public JLabel lblMessage, lblUser, lblNotice, lblUserCount;JList lstUser;JScrollPane spUser;JTextField txtNotice;JButton btnSend, btnKick;public String ti = "";public String serverMessage ="";public ServerFrame() {// 服务器窗口super("[HappyChat]聊天服务器");setSize(550, 500);setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE);setResizable(false);Dimension scr = Toolkit、getDefaultToolkit()、getScreenSize();// 在屏幕居中显示Dimension fra = this、getSize();if (fra、width > scr、width) {fra、width = scr、width;}if (fra、height > scr、height) {fra、height = scr、height;}this、setLocation((scr、width - fra、width) / 2,(scr、height - fra、height) / 2);// ==========服务器信息面板=========================pnlServer = new JPanel();pnlServer、setLayout(null);pnlServerInfo = new JPanel(new GridLayout(14, 1));pnlServerInfo、setBorder(BorderFactory、createCompoundBorder(BorderFactory、createTitledBorder(""), BorderFactory、createEmptyBorder(1, 1, 1, 1)));lblStatus = new JLabel("当前状态:");txtStatus = new JTextField(10);txtStatus、setEditable(false);lblNumber = new JLabel("当前在线人数:");txtNumber = new JTextField("0 人", 10);txtNumber、setEditable(false);lblMax = new JLabel("最多在线人数:");txtMax = new JTextField("50 人", 10);txtMax、setEditable(false);lblServerName = new JLabel("服务器名称:");txtServerName = new JTextField(10);txtServerName、setEditable(false);lblProtocol = new JLabel("访问协议:");txtProtocol = new JTextField("HTTP", 10); txtProtocol、setEditable(false);lblIP = new JLabel("服务器IP:");txtIP = new JTextField(10);txtIP、setEditable(false);lblPort = new JLabel("服务器端口:");txtPort = new JTextField("8000", 10);txtPort、setEditable(false);btnStop = new JButton("关闭服务器(C)");btnStop、addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { closeServer();}});lblLog = new JLabel("[服务器日志]");taLog = new TextArea(20, 50);btnSaveLog = new JButton("保存日志(S)"); btnSaveLog、addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { saveLog();}});pnlServerInfo、add(lblStatus);pnlServerInfo、add(txtStatus); pnlServerInfo、add(lblNumber); pnlServerInfo、add(txtNumber); pnlServerInfo、add(lblMax);pnlServerInfo、add(txtMax);pnlServerInfo、add(lblServerName); pnlServerInfo、add(txtServerName); pnlServerInfo、add(lblProtocol); pnlServerInfo、add(txtProtocol); pnlServerInfo、add(lblIP);pnlServerInfo、add(txtIP);pnlServerInfo、add(lblPort);pnlServerInfo、add(txtPort);pnlServerInfo、setBounds(5, 5, 100, 400); lblLog、setBounds(110, 5, 100, 30);taLog、setBounds(110, 35, 400, 370); btnStop、setBounds(200, 410, 120, 30); btnSaveLog、setBounds(320, 410, 120, 30); pnlServer、add(pnlServerInfo);pnlServer、add(lblLog);pnlServer、add(taLog);pnlServer、add(btnStop);pnlServer、add(btnSaveLog);// ===========在线用户面板==================== pnlUser = new JPanel();pnlUser、setLayout(null);lblMessage = new JLabel("[用户消息]");taMessage = new TextArea(20, 20);lblNotice = new JLabel("通知:");txtNotice = new JTextField(20);btnSend = new JButton("发送(S)");btnSend、setEnabled(true);btnSend、addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {serverMessage();}});lblUserCount = new JLabel("在线总人数 0 人");btnKick = new JButton("踢人(K)");btnKick、addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {tiRen();}});lblUser = new JLabel("[在线用户列表]");lstUser = new JList();lstUser、setVisibleRowCount(17);lstUser、setFixedCellWidth(180);//指定的固定单元格宽度值,而不就是从列表元素计算而来的宽度值lstUser、setFixedCellHeight(18);spUser = new JScrollPane();spUser、setVerticalScrollBarPolicy(JScrollPane、VERTICAL_SCROLLBAR_ALWAYS);spUser、getViewport()、setView(lstUser);lblMessage、setBounds(5, 5, 100, 25);taMessage、setBounds(5, 35, 300, 360);lblUser、setBounds(310, 5, 100, 25);spUser、setBounds(310, 35, 220, 360);lblNotice、setBounds(5, 410, 40, 25);txtNotice、setBounds(50, 410, 160, 25);btnSend、setBounds(210, 410, 80, 25);lblUserCount、setBounds(320, 410, 100, 25);btnKick、setBounds(440, 410, 80, 25);pnlUser、add(lblMessage);pnlUser、add(taMessage);pnlUser、add(lblUser);pnlUser、add(spUser);list = new JList();list、setListData(new String[] { "" });spUser、setViewportView(list);pnlUser、add(lblNotice);pnlUser、add(txtNotice);pnlUser、add(btnSend);pnlUser、add(lblUserCount);pnlUser、add(btnKick);// ============主标签面板======================== tpServer = new JTabbedPane(JTabbedPane、TOP);tpServer、add("服务器管理", pnlServer);tpServer、add("用户信息管理", pnlUser);this、getContentPane()、add(tpServer);setVisible(true);}protected void serverMessage() {// TODO自动生成方法存根this、serverMessage = txtNotice、getText();txtNotice、setText("");}protected void closeServer() {// TODO自动生成方法存根this、dispose();//this、res}protected void saveLog() {// TODO自动生成方法存根try {= new ("log、txt",true);String temp = taMessage、getText();(temp、getBytes());();JOptionPane、showMessageDialog(null, "记录保存在log、txt");} catch (Exception e) {System、out、println(e);}}protected void tiRen() {// TODO自动生成方法存根ti = list、getSelectedValue()、toString();log("Ti:"+ti);}private void log(String string) {// TODO自动生成方法存根String newta = taMessage、getText();newta += ("\n"+string);taMessage、setText(newta);}public void actionPerformed(ActionEvent evt) {}public static void main(String args[]) {new ServerFrame();}}Connection、java文件public class Connection extends Thread {/*** 与客户端通讯Socket*/private Socket netClient;/*** 在线用户列表*/private Vector<Customer> userOnline;/*** 聊天信息*/private Vector<Chat> userChat;/*** 从客户到服务器输入流*/private ObjectInputStream fromClient;/*** 传到客户端打印流*/private PrintStream toClient;/*** 注册用户列表*/private static Vector vList = new Vector(); /*** 临时对象*/private Object obj;/*** 服务器日志窗体*/private ServerFrame sFrame;@SuppressWarnings("unchecked")/*** 创建与客户端通讯*/public Connection(ServerFrame frame, Socket client, Vector u, Vector c) {netClient = client;userOnline = u;userChat = c;sFrame = frame;try {// 发生双向通信// 检索客户输入fromClient = new ObjectInputStream(netClient、getInputStream());// 服务器写到客户toClient = new PrintStream(netClient、getOutputStream());} catch (IOException e) {try {netClient、close();} catch (IOException e1) {System、out、println("不能建立流" + e1);return;}}this、start();}/*** 处理与客户端的通讯线程*/public void run() {try {// obj就是Object类的对象obj = (Object) fromClient、readObject();if (obj、getClass()、getName()、equals("Customer")) { // serverLogin();serverLoginDB();}if (obj、getClass()、getName()、equals("Register_Customer")) {// serverRegiste();serverRegisteDB();}if (obj、getClass()、getName()、equals("Message")) { serverMessage();if (obj、getClass()、getName()、equals("Chat")) { serverChat();}if (obj、getClass()、getName()、equals("Exit")) { serverExit();}} catch (IOException e) {System、out、println(e);} catch (ClassNotFoundException e1) {System、out、println("读对象发生错误!" + e1);} finally {try {netClient、close();} catch (IOException e) {System、out、println(e);}}}/**** 登录处理*/@SuppressWarnings("deprecation")public void serverLogin() {Customer clientMessage2 = (Customer) obj;// 读文件file3 = new ("user、txt");ObjectInputStream objInput1 = newObjectInputStream(file3);vList = (Vector) objInput1、readObject();int find = 0; // 查找判断标志// System、out、println(find);for (int i = 0; i < vList、size(); i++) {Register_Customer reg = (Register_Customer) vList、elementAt(i);if (reg、custName、equals(clientMessage2、custName)) {find = 1;if (!reg、custPassword、equals(clientMessage2、custPassword)) {toClient、println("密码不正确");break;} else {// 判断就是否已经登录int login_flag = 0;for (int a = 0; a < userOnline、size(); a++) {// chenminString _custName = ((Customer) userOnline、elementAt(a))、custName;if (clientMessage2、custName、equals(_custName)) {login_flag = 1;break;}}if (userOnline、size() >= 50) {toClient、println("登录人数过多,请稍候再试");break;}if (login_flag == 0) {clientMessage2、custHead = reg、head;// getUserHeadByName(clientMessage2、custName);userOnline、addElement(clientMessage2);toClient、println("登录成功");Date t = new Date();log("用户" + clientMessage2、custName + "登录成功,"+ "登录时间:" + t、toLocaleString() + "\n");freshServerUserList();break;} else {toClient、println("该用户已登录");}}} else {continue;}}if (find == 0) {toClient、println("没有这个用户,请先注册");}();objInput1、close();fromClient、close();} catch (ClassNotFoundException e) {System、out、println(e);} catch (IOException e) {System、out、println(e);}}/**** 登录处理** @throws Exception*/@SuppressWarnings("deprecation")public void serverLoginDB() {try {Customer clientMessage2 = (Customer) obj;String name = clientMessage2、custName;String pass = clientMessage2、custPassword;String sql = "select * from yonghu where custName='"+ name + "'";ResultSet rs = DB、executeQuery(sql);System、out、println("sql:" + sql);boolean login = false;String head="";while (rs、next()) {String ps=rs、getString("custPassword")、toString();System、out、println("ps:["+ps+"]");System、out、println("pass:["+pass+"]");if (ps、equals(pass、toString())) {login = true;System、out、println("logined:");}System、out、println("compareTo:"+ps、compareTo(pass));head=rs、getString("head");System、out、println("head:"+rs、getString("head"));}System、out、println("login:"+login);if (!login) {toClient、println("密码不正确");return;}// 判断就是否已经登录int login_flag = 0;for (int a = 0; a < userOnline、size(); a++) {String _custName = ((Customer) userOnline、elementAt(a))、custName;if (clientMessage2、custName、equals(_custName)) {login_flag = 1;break;}}if (userOnline、size() >= 50) {toClient、println("登录人数过多,请稍候再试");return;}if (login_flag == 0) {System、out、println("head:"+head);clientMessage2、custHead =head;// getUserHeadByName(clientMessage2、custName);userOnline、addElement(clientMessage2);toClient、println("登录成功");Date t = new Date();log("用户" + clientMessage2、custName + "登录成功," + "登录时间:"+ t、toLocaleString() + "\n");freshServerUserList();return;} else {toClient、println("该用户已登录");}fromClient、close();} catch (Exception e) {e、printStackTrace();}}/*** 刷新服务器日志窗体在线列表**/private void freshServerUserList() {String[] userList = new String[50];Customer cus = null;for (int j = 0; j < userOnline、size(); j++) {cus = (Customer) userOnline、get(j);userList[j] = cus、custName;}sFrame、list、setListData(userList);sFrame、txtNumber、setText("" + userOnline、size());sFrame、lblUserCount、setText("当前在线人数:" + userOnline、size());// System、out、println("fresh ok");}/*** 注册处理*/@SuppressWarnings( { "unchecked", "deprecation" })public void serverRegiste() {try {int flag = 0; // 就是否重名判断标志Register_Customer clientMessage = (Register_Customer) obj;= new File("user、txt");if (fList、length() != 0)// 判断就是否就是第一个注册用户{ObjectInputStream objInput = new ObjectInputStream(new (fList));vList = (Vector) objInput、readObject();// 判断就是否有重名for (int i = 0; i < vList、size(); i++) {Register_Customer reg = (Register_Customer) vList、elementAt(i);if (reg、custName、equals(clientMessage、custName)) {toClient、println("注册名重复,请另外选择");flag = 1;break;} else if (reg、custName、equals("所有人")) {toClient、println("禁止使用此注册名,请另外选择");flag = 1;break;}}}if (flag == 0) {// 添加新注册用户vList、addElement(clientMessage);// 将向量中的类写回文件file = new (fList);ObjectOutputStream objout = newObjectOutputStream(file);objout、writeObject(vList);// 发送注册成功信息toClient、println(clientMessage、custName + "注册成功");Date t = new Date();log("用户" + clientMessage、custName + "注册成功, " + "注册时间:"+ t、toLocaleString() + "\n");();objout、close();fromClient、close();}} catch (ClassNotFoundException e) {System、out、println(e);} catch (IOException e) {System、out、println(e);}}/*** 注册处理*/@SuppressWarnings( { "unchecked", "deprecation" })public void serverRegisteDB() {try {int flag = 0; // 就是否重名判断标志Register_Customer clientMessage = (Register_Customer) obj;String sql = "select * from yonghu where custName='"+ clientMessage、custName + "'";ResultSet rs = DB、executeQuery(sql);System、out、println("sql:" + sql);boolean reg = false;while (rs、next()) {reg = true;ResultSetMetaData rsmd = rs、getMetaData();int numberOfColumns = rsmd、getColumnCount();for(int i=1;i<=numberOfColumns;i++){String me=rsmd、getColumnName(i);String v=rs、getString(i);System、out、println(me+":"+v);}System、out、println();}System、out、println("reg:"+reg);if (reg) {toClient、println("注册名重复,请另外选择");return;}if (clientMessage、custName、equals("所有人")) {toClient、println("禁止使用此注册名,请另外选择");return;}sql = "insert intoyonghu(custName,custPassword,age,sex,email,head) values('"+ clientMessage、custName+ "','"+ clientMessage、custPassword+ "','"+ clientMessage、age+ "','"+ clientMessage、sex+ "','"+ clientMessage、email+ "','" + clientMessage、head + "')";System、out、println("c:"+sql);DB、executeUpdate(sql);toClient、println(clientMessage、custName + "注册成功");Date t = new Date();log("用户" + clientMessage、custName + "注册成功, " + "注册时间:"+ t、toLocaleString() + "\n");fromClient、close();} catch (Exception e) {e、printStackTrace();System、out、println(e);}}/*** 发送信息处理*/public void serverMessage() {try {Message mess = new Message();mess、userOnLine = userOnline;mess、chat = userChat;mess、ti = sFrame、ti;mess、serverMessage = "" + sFrame、serverMessage;ObjectOutputStream outputstream = new ObjectOutputStream(netClient、getOutputStream());outputstream、writeObject((Message) mess);netClient、close();outputstream、close();} catch (IOException e) {}}/*** 增加信息处理*/public void serverChat() {// 将接收到的对象值赋给聊天信息的序列化对象Chat cObj = new Chat();cObj = (Chat) obj;// chenmincObj、chatMessage = WordFilter、filter(cObj、chatMessage);chatLog(cObj);// 将聊天信息的序列化对象填加到保存聊天信息的矢量中userChat、addElement((Chat) cObj);return;}/*** 用户退出处理*/@SuppressWarnings("deprecation")public void serverExit() {Exit exit = new Exit();exit = (Exit) obj;removeUser(exit);// chenminif (sFrame、ti、equals(exit、exitname)) {sFrame、ti = "";}Date t = new Date();log("用户" + exit、exitname + "已经退出, " + "退出时间:" + t、toLocaleString());freshServerUserList();}/*** 在线用户中删除退出用户** @param exit* 退出用户名对象*/private void removeUser(Exit exit) {// TODO自动生成方法存根Vector<Customer> vec = new Vector<Customer>();Customer _cus = null;for (int j = 0; j < userOnline、size(); j++) {_cus = (Customer) userOnline、get(j);if (!exit、exitname、equals(_cus、custName)) {vec、add(_cus);}// System、out、println("list:"+_cus、custName);}userOnline、removeAllElements();for (int j = 0; j < vec、size(); j++) {_cus = (Customer) vec、get(j);userOnline、add(_cus);}}/*** 日志服务器窗体写信息** @param log* 日志信息*/public void log(String log) {String newlog = sFrame、taLog、getText() + "\n" + log;sFrame、taLog、setText(newlog);}/**** 日志服务器窗体写聊天信息*** 聊天信息对象*/@SuppressWarnings("deprecation")public void chatLog(Chat obj) {String newlog = sFrame、taMessage、getText();Date date = new Date();if (!obj、whisper) {newlog += "\n";newlog += ("[" + date、toLocaleString() + "]");newlog += obj、chatUser;newlog += "->";newlog += obj、chatToUser;newlog += ":";newlog += obj、chatMessage;}String text = "";text += obj、chatUser;text += "->";text += obj、chatToUser;text += ":";text += obj、chatMessage;String sql ="insert into logs(text,shijian)values('"+text+"','"+date、toLocaleString()+"')";try {System、out、println(sql);DB、executeUpdate(sql);} catch (Exception e) {// TODO Auto-generated catch blocke、printStackTrace();}sFrame、taMessage、setText(newlog);}}设计体会及今后的改进意见为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校特安排我们进行为期二周的Visual C++课程设计实习,并安排了指导老师帮助辅导,让我们在规范化、严谨化、实用化上面有了很大进展。