基于java socket的聊天室项目文档.docx
- 文档编号:24998115
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:35
- 大小:627.83KB
基于java socket的聊天室项目文档.docx
《基于java socket的聊天室项目文档.docx》由会员分享,可在线阅读,更多相关《基于java socket的聊天室项目文档.docx(35页珍藏版)》请在冰豆网上搜索。
基于javasocket的聊天室项目文档
北京邮电大学软件学院
2010-2011学年第1学期实训项目文档
(每个项目小组一份)
课程名称:
全日制研究生实训
项目名称:
通信软件实训
项目完成人:
姓名:
学号:
姓名:
学号:
姓名:
学号:
姓名:
学号:
姓名:
学号:
姓名:
学号:
指导教师:
日期:
2011年1月21日
基于javasocket的聊天室实现
一.实训项目目的和要求(说明通过本项目希望达到的目的和要求)
■目的:
熟练掌握socket编程原理,并用javasocket实现聊天室
■要求:
实现p2p和聊天室功能
二.实训项目开发环境(说明本项目需要的环境)
■开发工具:
EclipseSDKVersion:
3.5.2和NetBeans6.9.1版本
■系统:
win7
三.实训项目内容(说明本项目的内容,如:
问题分析、设计方案、算法、设计图等)
1.问题分析
网络编程中两个主要的问题一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。
在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。
而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。
目前较为流行的网络编程模型是客户机/服务器(C/S)结构。
即通信双方一方作为服务器等待客户提出请求并予以响应。
客户则在需要服务时向服务器提出申请。
服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。
两类传输协议:
TCP;UDP。
TCP是TranferControlProtocol的简称,是一种面向连接的保证可靠传输的协议。
通过TCP协议传输,得到的是一个顺序的无差错的数据流。
发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是serversocket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。
两类传输协议:
TCP;UDP。
TCP是TranferControlProtocol的简称,是一种面向连接的保证可靠传输的协议。
通过TCP协议传输,得到的是一个顺序的无差错的数据流。
发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是serversocket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。
UDP是UserDatagramProtocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
比较:
UDP:
1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。
2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。
3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方
TCP:
1,面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接时间。
2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的数据。
3,TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。
应用:
1,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。
但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高。
2,UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。
例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。
2.设计方案
基于Socket的java网络编程。
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。
Socket通常用来实现客户方和服务方的连接。
Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。
在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
Socket通讯的过程。
Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。
一个连接就建立起来了。
Server端和Client端都可以通过send,recv等方法与对方通信。
3.设计图
图1:
聊天室用例图
用例说明文本:
1、用户登录用例:
客户端运行,用户可以用用户名和端口号登陆到服务器。
2、服务器注册用例:
服务器根据用户输入的用户名和端口号和sip地址记录用户信息并把信息广播给所有的在线用户。
3、客户端发送消息用例:
客户端县服务器带有关键字(群聊/私聊/登录/退出)的消息到服务器。
4、服务器转发消息用例:
服务器解析收到的消息,提取目的端sip地址,并把消息转发到目的端。
5、客户端退出用例:
客户端向服务器发送logon消息。
服务器把该客户信息从用户列表中删除,并更新在线列表。
图2聊天室领域模型
图3登录顺序图
图4聊天顺序图
四.实训项目结果及分析
项目分析:
客户端实现:
以服务方主机地址和端口号为参数调用Socket类的构造函数去创建一个Socket对象.创建过程包含了向服务方请求建立通讯连接。
使用Socket对象的getInputStream()和getOutputStream()方法创建用于网络传输的输入/输出流。
使用所得的网络流对象读写数据,网络流对象将读写转换成对Socket数据的接收和发送。
工作完毕,关闭网络流对象
服务器实现:
以某端口号为参数调用ServerSocket类的构造函数去创建一个ServerSocket对象,作为服务器的Socket。
调用被创建的ServerSocket对象的accept()方法在指定端口监听客户方的连接请求。
收到客户请求后,accept()方法返回一个新建的Socket对象,该对象代表和客户方建立起来的通讯连接在服务方的通讯端点。
使用Socket对象的getInputStream()和getOutputStream()方法创建用于网络传输的输入/输出流。
使用所得的网络流对象读写数据,网络流对象将读写转换成对Socket的数据的接收和发送。
工作完毕,关闭网络流对象
项目实现:
五.实训项目人员、进度安排及完成过程
小组一共六个人,在这一星期的实训中,每个人都认真学习了javasocket的内容,并在此基础上进一步完成聊天室功能实现。
由于基础不同,我小组分工及人员完成情况如下:
小组组长:
在这个项目里主要负责协调各个组员之间的协作,进行项目分工,画用例模型,总结整理组员的工作。
技术经理:
主要负责javasocket的研究并回答小组其他成员的疑问,在聊天室的设计过程中,对一些功能实现提出了建设性的意见。
技术人员:
主要负责几个聊天室程序的分析与设计,设计文档的撰写,聊天室程序编写的大部分工作。
测试人员:
负责聊天室程序的测试工作,需求文档的撰写,负责文档的整理,资料的搜集以及小组PPT的制作。
六.实训项目心得及体会
心得体会:
理解了socket工作流程和实现方法,熟练掌握socket编程,实现了简单的聊天室功能,对多线程有了更进一步的理解。
通过老师对SIP协议的讲解,使我对SIP协议有了一个初步的认识,使我明白了SIP(SessionInitiationProtocol)是一个应用层的信令控制协议。
用于创建、修改和释放一个或多个参与者的会话。
这些会话可以好似Internet多媒体会议、IP电话或多媒体分发。
会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。
在学习网络传输的过程中,对两种网络传输协议有了更进一步的理解和深刻的体会。
七.附录(附上实训项目其他文档,具体内容根据项目要求确定)
1.需求分析文档错误!
未找到索引项。
2.设计文档
3.项目PPT
4.源程序
Linux 操作系统下基于c语言的socket聊天室实现
一.实训项目目的和要求(说明通过本项目希望达到的目的和要求)
基于Linux系统下的socket编程——P2P聊天系统
1.掌握Linux环境下socket编程的基本过程;
2.熟练掌握C语言编程方法;
3.了解GCC编译器的编译过程,并能在Linux系统下熟练使用。
二.实训项目开发环境(说明本项目需要的环境)
系统环境:
Linux系统
编译环境:
GCC编译器
三.实训项目内容(说明本项目的内容,如:
问题分析、设计方案、算法、设计图等)
问题分析:
如何通过socket实现Linux环境下的点对点通信。
设计方案:
1.目的:
在Linux系统中实现点对点通信
2.要求:
使用socket、C语言编程
3.步骤:
(1)根据socket通信机制,编写C源程序;
(2)对源程序进行反复测试、修改;
(3)实现点对点通信功能。
设计图:
四.实训项目结果及分析
P2P网络聊天系统的测试结果如下:
结果分析:
该测试是在一台计算机上进行的,若要实现两台计算机间的点对点通信,只需修改相应的IP地址和端口号即可。
如图所示,该系统实现了P2P通信,即通信双方之间可以相互发送和接收消息,达到了预期目的,满足了用户需求。
五.实训项目人员、进度安排及完成过程
小组一共六个人,在这一星期的实训中,每个人都认真学习了linux操作系统环境下的Csocket的内容,及GCC的编译环境,并在此基础上进一步完成聊天室功能实现。
具体的分工如下:
负责UDP通讯协议下聊天室的程序编写。
负责TCP通讯写一下的聊天室的程序编写。
同学,主要负责编写需求分析,绘制领域模型等工作。
六.实训项目心得及体会
Linux环境对于我们都是一个陌生的环境,通过这个项目的联系,收获的不仅是CSocket的通信编程。
更大的收获是对linux环境的学习,了解了linux的文件构成。
七.附录(附上实训项目其他文档,具体内容根据项目要求确定
部分核心代码
if(fork()==0)
{charmsg[256];
while(strcmp(msg,"@")!
=0)
{
printf("enterinputmessage\n");
scanf("%s",msg);
sendto(sockffdd,msg,sizeof(msg),0,(structsockaddr*)&server1,
sizeof(structsockaddr));
printf("sendsuccessful\n");
usleep(100000);
}
close(sockffdd);
}
/////////////////////////////////////////////////
charbuf[4096];
intresize,the_len;
the_len=sizeof(structsockaddr);
while(true){
printf("ok");
resize=recvfrom(sockfd,buf,sizeof(buf),0,
(structsockaddr*)&their,&the_len);
printf("receivemessageis:
%s",buf);
printf("\t\t%s\n",inet_ntoa(their.sin_addr));
}
基于JAIN-SIP聊天室的开发
一.实训项目目的和要求(说明通过本项目希望达到的目的和要求)
●熟悉JAIN-SIP协议规定的通信工程;
●完成一个有GUI界面的聊天室,最基本要实现公聊和私聊内容;
二.实训项目开发环境(说明本项目需要的环境)
开发工具:
Eclipse3.2版本和NetBeans6.9.1版本
系统要求:
装有Java虚拟机的WindowsXP及高版本、Linux等其他系统
接口/协议约束:
必须使用JAIN-SIP协议栈,支持IPv4接口
用户界面的约束:
用户界面要求操作系统能支持Java虚拟机,并有GUI桌面。
软件质量的约束:
正确实现了网上聊天室的群聊、私聊、显示在线列表,新建聊天室功能,选择进入聊天室。
服务器端通过JAIN-SIP封装的类使用多线程分别处理监听,发送功能。
但本软件的主要实现通信的只有一个类,略有庞大,并且与多个界面有联系,之间互相有操作、调用关系,故程序的耦合度比较大。
三.实训项目内容(说明本项目的内容,如:
问题分析、设计方案、算法、设计图等)
3.1本系统介绍:
本聊天室系统适用于大多数用户,对用户操作能力的要求低。
同时,该系统的界面简洁,系统资源占用少,运行速度快,对于小型局域网内的用户可以起到很好的交流作用。
所谓聊天室就是一个可以让许多用户同时相互通信的网上园地,个人用户可以通过网上聊天室将自未自己获取更多的知识和更多的阅历。
本聊天室主要用登录界面、聊天室界面、私聊界面、创建聊天室界面等构成,这个设计简洁明了,实用,使用简单。
系统的总体框架图如图2所示:
本系统的主要功能:
(1)聊天室系统界面由登录界面,聊天窗口,私聊窗口组成,聊天窗口分为聊天室名称,在线人数,消息发送区,消息显示区。
(2)用户首先在登录界面输入昵称,点击登录按钮登录系统。
客户端随即与服务端进行三次握手,收到“ok”回应后打开群聊窗口。
(3)用户可以在群聊窗口的点击用户在聊天室中的在线用户列表中可以双击某个用户,随后弹出私聊窗口,进行对被点击用户之间的私聊。
(4)用户可以创建新的聊天室,其他用户可以进入到新建的聊天室里。
(5)用户在聊天窗口可以发送消息,服务器收到消息后广播给所有登录用户。
并且在消息显示区显示消息发送方的昵称。
(6)服务器端可以记载所有用户的聊天的信息,包括私聊信息。
并能通过打开一个在线用户列表用户。
可以实时看到用户列表。
(7)聊天室系统界面由登录界面,聊天窗口,私聊窗口组成,聊天窗口分为聊天室名称,在线人数,在线用户列表区,聊天室创建/选择,消息发送区,消息显示区。
(8)用户首先在登录界面输入昵称,点击登录按钮登录系统。
客户端随即与服务端进行三次握手,收到“ok”回应后打开聊天窗口。
(9)用户可以在聊天窗口的点击聊天室标签,进行创建新的聊天室,或选择一个已有的聊天室。
用户创建新聊天可以点击创建后输入聊天室名称,然后点确定。
(10)用户在聊天窗口可以发送消息,服务器收到消息后广播给所有登录用户。
并且在消息显示区显示消息发送方的昵称,发送时间,消息内容。
用户在聊天室中的在线用户列表中可以双击某个用户,随后弹出私聊窗口,进行私聊。
3.1子系统结构图
(1)客户端子系统
(2)服务端子系统
3.3分解系统的目的:
聊天室的系统主要由客户端和服务端组合而成,故可以分为两个子系统。
这两个子系统可以独立的处理客户和服务器的各自的需求,如客户可以填写发送的消息,服务器可以查看用户的消息和用户的是否在线。
3.4子系统之间的关系
两者之间采用JAIN-SIP协议通过请求消息和响应消息建立通信机制。
3.5模块汇总
3.5.1登录系统
如表1所示:
用例名称
登录系统
范围
聊天室系统应用
级别
用户目标
主要参与者
登录用户
前置条件
无
成功保证
成功登录聊天室系统
主成功场景
1.用户进入登录窗口界面
2.用户输入昵称,并点击登陆,向服务器端发送登陆请求
3.系统验证用户身份,返回客户端一个响应
4.用户成功登录系统,并进入相应的聊天室系统
扩展
2a.登录超时
1.系统给出登录超时的提示
1.用户重新输入昵称,并提交
表1
3.5.2群聊
如表2所示:
用例名称
用户群聊
范围
聊天室系统应用
级别
用户目标
主要参与者
成功登录的用户
前置条件
用户登陆成功
成功保证
成功进行群聊
主成功场景
1.用户成功登录后,选择右侧下方的消息输入区
2.在输入区输入消息,并回车,消息发送
3.客户端将用户发送的信息打包传送给服务器
4.服务器对数据进行分析后,并将用户的信息进行正确处理
5.传给处在聊天室的所有在线其他用户
6.将消息正常显示在上方的消息显示区
扩展
3a.消息发送失败
1.系统给出消息发送失败的提示
2.用户重新输入消息,进行发送
表2
3.5.3私聊
如表3所示:
用例名称
用户私聊
范围
聊天室系统应用
级别
用户目标
主要参与者
成功登录的用户
前置条件
用户登录成功,私聊的对方在线
成功保证
成功进行私聊
主成功场景
1.用户双击在线列表中的某个用户
2.系统弹出私聊窗口
3.在窗口下方输入消息,点击发送按钮
4.系统转发消息,发送到指定的私聊用户,消息显示在私聊窗口的消息显示区,进行双方私聊
5.私聊结束,点击关闭按钮
扩展
3a.消息发送失败
1.系统给出消息发送失败的提示
2.用户重新输入消息,进行发送
特殊需求
不能与不在线的用户进行私聊
表3
3.5.4创建聊天室
如表4所示:
用例名称
创建聊天室
范围
聊天室系统应用
级别
用户目标
主要参与者
成功登录的用户
前置条件
用户登录成功
成功保证
成功创建聊天室
主成功场景
1.用户成功登录后,点击创建聊天室
2.系统弹出新窗口
3.用户输入聊天室名称点击确认
4.创建新聊天室,进行聊天
扩展
3a.用户如果输入已经存在的聊天室名称
1.系统给出创建失败的提示
2.用户重新输入,进行确认
表4
3.5.5退出系统
如表5所示:
用例名称
用户退出系统
范围
聊天室系统应用
级别
用户目标
主要参与者
成功登录的用户
前置条件
用户成功登录聊天室
成功保证
用户在正常情况下退出了聊天室
主成功场景
1.用户向服务器发送用户退出消息
2.服务器进行用户退出的数据处理
3.服务器向聊天室其他用户发送退出消息
4.刷新其他在线用户的用户列表信息,并显示当前在线人数
表5
3.6模块间关系
领域模型如下图所示:
群聊顺序图
私聊顺序图
四.实训项目结果及分析
登陆界面如下:
聊天界面如下:
创建群界面如下:
五.实训项目人员、进度安排及完成过程
小组成员
分工及安排
组长,组织大家讨论聊天室UML设计模型,编程设计思路,解决程序出现的问题。
编程人员,主要负责通信模式设计
编程人员,主要负责分析JAIN-SIPAPI。
调试程序,分析并解决问题。
调试程序,分析并解决问题。
编程人员,主要负责消息处理,界面设计
六.实训项目心得及体会
通过本次的实训项目的练习,让我们充分熟悉了sip协议以及sip在java编程中的实现方法——jain-sip作为API来调用。
熟练了我们在java的GUI方面的应用、强化了我们对于面向对象概念的理解、接口的作用;让我们对UML和OOAD的认识又更近了一层,如何用它们知道需求分析、进一步细分软件的功能实现到具体的人员分工。
七.附录(附上实训项目其他文档,具体内容根据项目要求确定
7.1稳定性和可扩展性
提示:
在“软件”生命周期内,判断哪些需求是不变的,预测哪些需求可能发生的变化。
在总体设计的时候,既要使总体结构稳定,又要适应需求变化。
当出现代码异常时,部分会出现正确的提示,但客户端的问题不会影响到服务器端正常的运行。
用户之间信息传输不会因为数据封装问题出现丢失或乱码。
因用户的误操作产生的非法输入信息会得到验证及时的处理或信息提示。
软件应正常完成所有功能需求。
服务器能长时间运行无故障,但当客户访问量大时或客户发送信息量大时,服务器可能会出现端口阻塞现象,消息得不到响应,甚至服务器瘫痪。
由于采用JAVA设计,故可移植性较好。
该软件项目将界面程序和后台处理程序分在不同的包中,服务器和客户端也是在不同的包中,这样将来还一些可以扩展系统的功能。
7.2性能分析
提示:
(1)本系统应当具备哪些性能指标才能满足用户的需求?
(2)如何实现性能指标?
1.安全性
用户的合法性不能被伪装。
防止网络对服务器的攻击。
用户的信息应该尽可能不能被黑客截取。
该软件项目目前的安全性还有待进一步提升,考虑没有使用数据库,且传输安全模式还有待进一步测试。
2.扩展性
系统建成后,应在现行系统上不需要做大的改动或不影响整个系统结构,就可以增加功能模块,这就必须在系统设计时留有接口,使其具有可扩展性和维护性。
该软件使用了接口,为了将来的扩展留有空间。
3.易用性
系统操作的界面必须简洁、操作方便易用、设计合理。
由于这次是实验软件,功能并不繁多,简单易用,但界面不够美化。
可以通过设计更好的Swing界面解决。
基于O-SIP聊天室的开发
一.实训项目目的和要求(说明通过本项目希望达到的目的和要求)
●熟悉JAIN-SIP协议规定的通信工程;
●完成一个基于控制台的聊天室,最基本要实现公聊和私聊内容;
二.实训项目开发环境(说明本项目需要的环境)
✧软件环境各种版本的widows操作系统(X86)
✧硬件环境CPU:
英特尔80386 以上配置
内存:
32MB
硬盘空间:
128M
✧接口/协议的约束:
支持标准的IP,TCP传输协议
✧软件质量的约束,如正确性、健壮性、可靠性、效率(性能)、易用性、
清晰性、安全性、可扩展性、兼容性、可移植性等等。
✧软件需求能在各种Windows操作系统上使用;能连续工作7*24小时,
界面清晰,易于使用;最大支持2000个用户同时在线聊天;支持可以进一步扩大在线人数,切在客户端可以进一步添加功能。
三.实训项目内容(说明本项目的内容,如:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于java socket的聊天室项目文档 基于 java socket 聊天室 项目 文档