软件课设报告网络聊天系统Word文件下载.docx
- 文档编号:19249137
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:22
- 大小:291.42KB
软件课设报告网络聊天系统Word文件下载.docx
《软件课设报告网络聊天系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件课设报告网络聊天系统Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。
Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。
Java编译一次,处处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。
丰富的类库为Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。
同时Java程序可以获取网络上节点的图像、声音、HTML文档及文本资源。
2.课题分析
主要涉及图形用户界面的开发、布局和输入/输出流数据的控制,并且要通过Socket技术实现网络功能,整个程序采用Swing图形界面,要求熟练掌握Java图形用户界面的事件处理及部分Swing组件的使用。
在代码的编写上要充分体现Java面向对象开发思想和多态性,提高代码的重用性和高效性,要深入理解接口的作用和内部对象等特性等。
课题设计的主要任务是运用已知的知识理论联系实践模仿QQ,实现简单的QQ功能如注册、登陆、查找好友、聊天功能。
服务端还能实现配置文件设置、用户管理、日志显示的功能。
从而对Java的开发背景有更进一步的认识,充分掌握Java在现实生活中的应用。
3.系统需求分析
网络聊天系统功能具体需求包括:
1)可以注册用户信息,设置密码,选择头像,并获取登陆账号。
2)可允许注册多个账号。
3)从登陆界面进行安全登录。
4)一个聊天室里所有的人都可以参与聊天。
5)聊天面板中会显示发送消息的时间,昵称,账号来区别不同人的消息内容。
6)可以通过用鼠标点击在线用户列表的用户来选择交流对象,并进行私聊和传送文件。
7)可以通过发送震动使聊天内容丰富多采,充满活力。
3.1连接服务器
需求描述:
用户在提示框中输入所连服务器IP。
执行者:
用户
前置条件:
无
后置条件:
正常过程:
1)向服务端发送客户端IP;
2)服务端响应客户端,客户端弹出登录面板;
异常过程:
1)用户填写IP的数据格式不正确或填写所连服务器的IP不正确,客户端给予提示信息,未连接服务器。
2)服务器未启动或出现异常。
3.2用户注册
需求描述:
用户填写系统给出的注册项目,并提交给系统,成功注册后,系统随机分配给用户所注册的登入ID,并保存在数据库当中。
通过注册模块实现用户的在线注册,所填写的注册项目有:
昵称、密码、密码确认、性别、头像。
服务器连接正常。
1)向服务端发送注册请求;
2)服务端响应客户端,客户端弹出注册信息表单;
3)用户填写完表单后将注册数据传给服务端处理,并保存在数据库中;
4)返回客户端一个响应,显示用户注册的ID,提示注册成功。
1)用户填写表单的数据格式不正确或表单中存在空缺的项,客户端给予
示信息。
2)用户注册的项在数据库中发生冲突,客户端提示注册不成功并提示用户重新填写表单。
3)服务器未连接成功或出现异常
3.3 用户登录
用户填写登录账号和密码,经服务器验证成功后进入聊天室主界面。
服务器连接正常,用户成功注册或已经拥有一个合法的账号号。
1)向服务端请求连接,并发送登录信息;
2)服务端处理并查询数据库中的用户信息;
3)返回客户端一个响应,提示登录成功,弹出聊天室主界面;
4)刷新其他在线用户的用户列表信息。
1)用户填写的ID或密码与数据库中的纪录不匹配,客户端提示登录失败。
3.4 私聊
用户可选择聊天室的在线用户列表中其他用户聊天,双方发送的信息对于聊天室的其他用户是不可见的。
用户登录成功,私聊的对方在线
1)客户端与服务端建立通讯;
2)客户端将用户发送的信息打包传送给服务端;
3)服务端进行数据分析,查找目的用户的ID,并将用户的信息传给目的用户;
4)目的用户收到服务器的信息后,正确的显示并保存。
客户端与服务端断开连接,不能与不在线的用户进行私聊。
3.5群聊
用户可以面向所有在线用户聊天,消息对所有用户可见。
用户正确登入后
1)不勾选“私聊”;
2)发送消息;
3)聊天框中显示对所有人说,所有在线用户可见。
服务端异常导致客户端未成功连接服务器。
3.6发送振动
用户可以在私聊功能下向对方发送振动。
用户进入私聊
1)勾选“私聊”;
2)选定在线用户列表中某一用户;
3)发送震动时,双方的聊天界面都会震动。
3.7文件传输
可对某一在线用户传送文件。
客户端
服务端正常运行
1)客户端A发起传输文件邀请;
2)服务端响应并处理数据,同时提醒客户端B是否接收;
3)若客户端B同意接收,则服务器将文件流传给客户端B;
反之,则服务器通知客户端A,对方拒绝接收。
1)服务端异常。
2)出现网络异常,发送文件失败。
3.8语音聊天
可对某一在线用户语音聊天。
1)客户端A发起语音邀请;
3)若客户端B同意接收,则服务器将录音文件流传给客户端B,播放客户端A所录语音,同时客户端B所录语音也会通过服务器传向客户端A;
2)出现网络异常,连接失败。
3.9剔除用户
在服务器界面中对已注册用户进行踢除。
服务器
服务器正常运行
1)在服务器界面中选定某一已注册用户,进行剔除;
2)数据库中关于此用户的信息注销。
服务端异常。
3.10用户退出
用户在正常情况下退出聊天室
用户成功登录聊天室
1)向服务器发送用户登出消息;
2)服务器进行用户退出的数据处理;
3)服务器向聊天室其他用户发送登出消息;
4)刷新其他在线用户的用户列表信息。
服务器异常。
三.系统设计(本人模块)
本聊天系统采用的是C/S(客户端-服务器)结构,由注册界面、登录界面、聊天室界面、服务器界面等构成。
整个设计简洁明了、实用,使用简单。
C/S框图:
聊天系统总设计框图:
(虚线框内为本人设计)
功能模块实现流程图:
1)连接服务器
开启服务器,再开启客户端,从弹窗提示中的文本框中输入服务器IP,提交后,服务器响应连接,若连接不正确,弹窗提示,未连接成功;
反之,则获取客户端IP,客户端进入登陆界面。
2)用户注册
用户进入登录界面后,点击注册,进入注册界面,填写用户基本信息,设置密码时,若两次密码输入不一致,则弹窗提示密码输入不一致,返回注册界面,重新输入。
注册信息填写完后提交确认。
服务器响应处理该用户数据,并将数据添加入数据库。
服务器向该客户端发送弹窗消息,分配其账号。
3)用户登录
用户进入登录界面,输入账号及密码,点击登录,服务器响应,若账号密码与数据库中的信息不一样,客户端弹窗提示账号密码不匹配;
反之,进入聊天主界面。
4)私聊
若客户端A向客户端B发送消息,则在聊天主界面中勾选“私聊”,在在线列表中选定用户B,然后在输入框中输入文本信息,点击发送。
此时服务器响应,接收客户端A发送的消息(oos流),处理后发送给客户端B,客户端B读入接收,并读入消息(ois流),收到的消息显示在界面上。
5)群聊
客户端A向所有在线用户发送消息,在聊天主界面上不勾选“私聊”,将所发消息输入并发送,此时服务器响应,接收数据流,经处理,向所有在线用户发送该消息,其他客户端读入该数据流,在界面中显示接收消息。
6)发送振动
客户端A向客户端B发送振动,选中在线列表中的B,点击振动图标,服务器响应并处理,两客户端窗口同时振动。
四.系统实现(本人实现模块)
1.连接服务器
/**连接到服务器*/
publicstaticvoidconnection(){
DataBuffer.configProp.getProperty("
ip"
);
Stringip=serverIP;
intport=Integer.parseInt(DataBuffer.configProp.getProperty("
port"
));
try{
System.out.println(ip);
DataBuffer.clientSeocket=newSocket(ip,port);
DataBuffer.oos=newObjectOutputStream(DataBuffer.clientSeocket.getOutputStream());
DataBuffer.ois=newObjectInputStream(DataBuffer.clientSeocket.getInputStream());
}catch(Exceptione){
e.printStackTrace();
JOptionPane.showMessageDialog(newJFrame(),
"
连接服务器失败,请检查!
"
"
服务器未连上"
JOptionPane.ERROR_MESSAGE);
//否则连接失败
System.exit(0);
}
}
}
2.用户注册
privatevoidregiste(Useruser)throwsIOException,ClassNotFoundException{
Requestrequest=newRequest();
request.setAction("
userRegiste"
request.setAttribute("
user"
user);
//获取响应
Responseresponse=ClientUtil.sendTextRequest(request);
ResponseStatusstatus=response.getStatus();
switch(status){
caseOK:
Useruser2=(User)response.getData("
JOptionPane.showMessageDialog(RegisterFrame.this,
恭喜您,您的帐号:
+user2.getId()+"
请牢记!
!
注册成功"
JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false);
break;
default:
注册失败,请稍后再试!
!
服务器内部错误!
JOptionPane.ERROR_MESSAGE);
3.用户登录
/**登录*/
privatevoidlogin(){
if(idTxt.getText().length()==0
||pwdFld.getPassword().length==0){
JOptionPane.showMessageDialog(LoginFrame.this,
账号和密码是必填的"
输入有误"
idTxt.requestFocusInWindow();
return;
if(!
idTxt.getText().matches("
^\\d*$"
)){
账号必须是数字"
Requestreq=newRequest();
req.setAction("
userLogin"
req.setAttribute("
id"
idTxt.getText());
password"
newString(pwdFld.getPassword()));
DataBuffer.configProp.getProperty("
Responseresponse=null;
response=ClientUtil.sendTextRequest(req);
}catch(IOExceptione1){
e1.printStackTrace();
if(response.getStatus()==ResponseStatus.OK){
//获取当前用户
if(user2!
=null){//登录成功
DataBuffer.currentUser=user2;
//获取当前在线用户列表
DataBuffer.onlineUsers=(List<
User>
)response.getData("
onlineUsers"
LoginFrame.this.dispose();
newChatFrame();
//打开聊天窗体
}else{//登录失败
Stringstr=(String)response.getData("
msg"
JOptionPane.showMessageDialog(LoginFrame.this,
str,
"
登录失败"
}
}else{
服务器内部错误,请稍后再试!
4.私聊
//选择某个用户
onlineList.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente){
UserselectedUser=(User)onlineList.getSelectedValue();
if(rybqBtn.isSelected()){
if(DataBuffer.currentUser.getId()==selectedUser.getId()){
otherInfoLbl.setText("
当前状态:
想自言自语?
...系统不允许"
}else{
与"
+selectedUser.getNickname()
+"
("
+selectedUser.getId()+"
)私聊中..."
}
}
});
//发送文本消息
//快捷键Enter发送消息
sendArea.addKeyListener(newKeyAdapter(){
publicvoidkeyPressed(KeyEvente){
if(e.getKeyCode()==Event.ENTER){
sendTxtMsg();
}
submitBtn.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
sendTxtMsg();
5.群聊
Messagemsg=newMessage();
if(rybqBtn.isSelected()){//私聊
if(null==selectedUser){
JOptionPane.showMessageDialog(ChatFrame.this,"
没有选择私聊对象!
不能发送"
return;
}else{
msg.setToUser(selectedUser);
msg.setFromUser(DataBuffer.currentUser);
msg.setSendTime(newDate());
DateFormatdf=newSimpleDateFormat("
HH:
mm:
ss"
StringBuffersb=newStringBuffer();
sb.append("
"
).append(df.format(msg.getSendTime())).append("
)
.append(msg.getFromUser().getNickname())
.append("
).append(msg.getFromUser().getId()).append("
)"
if(!
this.rybqBtn.isSelected()){//群聊
sb.append("
对大家说"
对"
).append(selectedUser.getNickname())
.append("
).append(selectedUser.getId()).append("
)"
说"
\n"
).append(content).append("
\n"
msg.setMessage(sb.toString());
Requestrequest=newRequest();
request.setAction("
chat"
request.setAttribute("
msg);
try{
ClientUtil.sendTextRequest2(request);
}catch(IOExceptione){
e.printStackTrace();
6.发送振动
/**发送振动*/
publicvoidsendShakeMsg(){
UserselectedUser=(User)onlineList.getSelectedValue();
if(null!
=selectedUser){
if(DataBuffer.currentUser.getId()==selectedUser.getId()){
JOptionPane.showMessageDialog(ChatFrame.this,"
不能给自己发送振动!
//调出标题为"
Message"
的信息消息对话框
//用于错误信息
}else{
Messagemsg=newMessage();
msg.setFromUser(DataBuffer.currentUser);
msg.setToUser(selectedUser);
msg.setSendTime(newDate());
DateFormatdf=newSimpleDateFormat("
StringBuffersb=newSt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 报告 网络 聊天 系统