计算机网络聊天室课程设计报告Word文件下载.docx
- 文档编号:18371670
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:18
- 大小:1.63MB
计算机网络聊天室课程设计报告Word文件下载.docx
《计算机网络聊天室课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机网络聊天室课程设计报告Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
b.登录
去“user.txt〞读取用户数据,验证用户名是否存在,验证用户密码是否正确,如果以上验证全部正确,返回客户端信息,提示登陆成功进入聊天界面。
c.聊天
所有已登录的用户的名称都会在列表中显示,然后就可以选择其中一个或多个发起聊天。
接收用户聊天信息,当用户发送聊天信息时,效劳端将会收到客户端用Socket传输过来的聊天信息对象,然后将其转换为Message对象,返回聊天信息,然后系统从Message中提取消息类型,再根据类型将消息转化后通过Socket转发到相应的用户。
d.文件传输
在聊天的根底上增加了一个文件传输功能。
同事之间办公难免有一些资料的来往,在登录列表中选择一个用户或多个用户发送文件,等对方确认接收后即可建立连接进展文件传输。
二、设计说明
聊天室总体分为三个模块,主要包括注册登录,聊天模块,文件传输模块。
系统运行在java环境中,要求java环境为JDK1.8+;
设计中的重点是通过Java中的ServerSocket搭建TCP效劳器,通过在客户端创立Socket套接字连接效劳器,然后通过ObjectOutputStream来发送Message〔数据消息的封装类〕对象让效劳器承受。
通过线程来存储来存储用户的Socket连接状态,承受并处理用户发过来的信息,返回处理信息。
客户机也通过线程来承受效劳器的处理数据做出响应。
设计的难点是文件的传输,首先通过原有的效劳器获得目标客户机的IP地址和端口,然后在客户机上建立效劳器,通过要发送的文件的客户机连接承受文件的客户机用DataInputStream和DataOutputStream来推送到输入、输出流。
然后客户机承受并保存。
三、系统详细设计
1.功能模块
2.流程图
四、程序源代码及注释
publicChatRoom(Stringu_name,Socketclient){
//赋值
name=u_name;
clientSocket=client;
onlines=newVector();
setTitle(name);
setResizable(false);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setBounds(200,100,688,510);
contentPane=newJPanel();
setContentPane(contentPane);
contentPane.setLayout(null);
//聊天信息显示区域
JScrollPanescrollPane=newJScrollPane();
scrollPane.setBounds(10,10,410,300);
getContentPane().add(scrollPane);
textArea=newJTextArea();
textArea.setEditable(false);
textArea.setLineWrap(true);
//激活自动换行功能
textArea.setWrapStyleWord(true);
//激活断行不断字功能
textArea.setFont(newFont("
sdf"
Font.BOLD,13));
scrollPane.setViewportView(textArea);
//打字区域
JScrollPanescrollPane_1=newJScrollPane();
scrollPane_1.setBounds(10,347,411,97);
getContentPane().add(scrollPane_1);
finalJTextAreatextArea_1=newJTextArea();
textArea_1.setLineWrap(true);
textArea_1.setWrapStyleWord(true);
scrollPane_1.setViewportView(textArea_1);
//关闭按钮
finalJButtonbtnNewButton=newJButton("
关闭"
);
btnNewButton.setBounds(214,448,60,30);
getContentPane().add(btnNewButton);
//发送按钮
JButtonbtnNewButton_1=newJButton("
发送"
btnNewButton_1.setBounds(313,448,60,30);
getRootPane().setDefaultButton(btnNewButton_1);
getContentPane().add(btnNewButton_1);
//在线客户列表
listmodel=newUUListModel(onlines);
list=newJList(listmodel);
list.setCellRenderer(newCellRenderer());
list.setOpaque(false);
Borderetch=BorderFactory.createEtchedBorder();
list.setBorder(BorderFactory.createTitledBorder(etch,"
<
+u_name+"
>
+"
在线用户:
TitledBorder.LEADING,TitledBorder.TOP,newFont("
Font.ITALIC,20),Color.black));
JScrollPanescrollPane_2=newJScrollPane(list);
scrollPane_2.setBounds(430,10,245,375);
scrollPane_2.setOpaque(false);
scrollPane_2.getViewport().setOpaque(false);
getContentPane().add(scrollPane_2);
//文件传输栏
progressBar=newJProgressBar();
progressBar.setBounds(430,390,245,15);
progressBar.setMinimum
(1);
progressBar.setMaximum(100);
getContentPane().add(progressBar);
//文件传输提示
lblNewLabel=newJLabel(
"
文件传输信息栏:
lblNewLabel.setFont(newFont("
SimSun"
Font.PLAIN,12));
lblNewLabel.setBackground(Color.WHITE);
lblNewLabel.setBounds(430,410,245,15);
getContentPane().add(lblNewLabel);
try{
oos=newObjectOutputStream(clientSocket.getOutputStream());
//记录上线客户的信息,并发送给效劳器
MessagetoMsg=newMessage();
toMsg.setType(0);
toMsg.setName(name);
toMsg.setTimer(getTimer());
oos.writeObject(toMsg);
oos.flush();
//启动客户接收线程
CThread=newClientInputThread();
CThread.start();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
btnNewButton_1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Stringinfo=textArea_1.getText();
Listto=list.getSelectedValuesList();
if(to.size()<
1){
JOptionPane.showMessageDialog(getContentPane(),"
请选择聊天对象"
return;
}
if(to.toString().contains(name+"
(我)"
)){
JOptionPane
.showMessageDialog(getContentPane(),"
不能向自己发送信息"
if(info.equals("
不能发送空信息"
MessagetoMsg=newMessage();
toMsg.setType
(1);
toMsg.setName(name);
Stringtime=getTimer();
toMsg.setTimer(time);
toMsg.setInfo(info);
HashSetset=newHashSet();
set.addAll(to);
toMsg.setClients(set);
//自己发的内容也要现实在自己的屏幕上面
textArea.append(time+"
我对"
+to+"
说:
\r\n"
+info+"
sendMessage(toMsg);
textArea_1.setText(null);
textArea_1.requestFocus();
}
});
btnNewButton.addActionListener(newActionListener(){
if(isSendFile||isReceiveFile){
JOptionPane.showMessageDialog(contentPane,
"
正在传输文件中,您不能离开..."
ErrorMessage"
JOptionPane.ERROR_MESSAGE);
}else{
btnNewButton.setEnabled(false);
MessagetoMsg=newMessage();
toMsg.setType(-1);
toMsg.setName(name);
toMsg.setTimer(getTimer());
sendMessage(toMsg);
b=false;
//离开
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
//TODOAuto-generatedmethodstub
intresult=JOptionPane.showConfirmDialog(getContentPane(),
您确定要离开聊天室"
if(result==0){
MessagetoMsg=newMessage();
toMsg.setType(-1);
toMsg.setName(name);
toMsg.setTimer(getTimer());
sendMessage(toMsg);
//CThread.interrupt();
b=false;
}
//列表监听
list.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente){
if(e.getClickCount()==2){
if(to.toString().contains(name+"
JOptionPane.showMessageDialog(getContentPane(),"
不能向自己发送文件"
return;
//双击翻开文件文件选择框
FileChoosechooser=newFileChoose();
chooser.setDialogTitle("
选择文件框"
//标题哦...
chooser.showDialog(getContentPane(),"
选择"
//这是按钮的名字..
//判定是否选择了文件
if(chooser.getSelectedFile()!
=null){
//获取路径
filePath=chooser.getSelectedFile().getPath();
Filefile=newFile(filePath);
//文件为空
if(file.length()==0){
JOptionPane.showMessageDialog(getContentPane(),filePath+"
文件为空,不允许发送."
return;
}
toMsg.setType
(2);
//请求发送文件
toMsg.setSize(newLong(file.length()).intValue());
toMsg.setName(name);
toMsg.setFileName(file.getName());
//记录文件的名称
toMsg.setInfo("
请求发送文件"
//判断要发送给谁
HashSet<
String>
set=newHashSet<
();
set.addAll(list.getSelectedValuesList());
toMsg.setClients(set);
}
五、实验数据、结果分析
1.开启效劳器
效劳器用来将用户发送的信息发送到指定用户,所以程序执行
之前效劳器一定要开启。
如图5.1所示。
图5.1开启效劳器
2.用户登录
用户可以通过输入自己的账号密码来登录聊天室,如图5.2所示。
图5.2登录窗口
3.用户注册
当用户第一次登录时,可以通过自己注册一个账号来进入聊天室。
如图5.3所示。
图5.3用户注册
4.多用户登录
当有用户上线时效劳器会向所有在线用户发送用户上线通知。
如图5.4、5.5所示。
图5.4用户上线
5.5多用户上线
5.聊天
用户可以通过选中在线用户列表中的用户,向选中用户发送消息,可以选择一个或多个用户发送消息。
如图5.6所示。
图5.6聊天功能展示
6.发送文件
首先用户选择要发送文件的一个或多个用户,然后在用户列表双击,弹出选择文件框选取文件〔如图5.7所示〕,待接收方同意承受并选择好保存位置后开场发送〔如图5.8、5.9所示〕,直至发送完成〔如图5.10所示〕。
图5.75号向2、3、4号发送文件
图5.8等待接收方确认
图5.9文件传输
图5.10传输完毕
六、总结
这次我们所设计的课题是个聊天室,网络聊天已经成为人与人之间交流的一种方式,它能把复杂的事情简单化。
伴随着互联网的开展,日常交流变得越来越重要,同时人们更亲睐实时沟通方式,于是在线聊天室应运而生。
通过这次实习,让我们对网络的理解更加深刻,对编程的思路也更加清晰。
在这次实习中,我们遇到了很多问题,比方如何通过代码将网络中的TCP连接写出来,如何传输数据等同时我们在代码也出现了许多错误,如IO错误,Socket连接错误等。
这些错误虽然在当时我们感觉比拟困难,不能理解,但是当我们一个一个的去查阅各种资料,解决问题后,发现其实所有的问题只要自己耐下心去了解,去学习,一切困难都会迎刃而解。
同时自己也在这次课程设计中收获了许多编程经历,能力上也得到了很大的提高。
编程一直以来都是一件很枯燥乏味的事情,但我们必须严格要求自己,按照教师所说的编程思想,分块编写。
可能因为某一处的小的错误而导致整个程序的无法运行,然后需要努力去找资料、XX解决。
但是当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。
因此在以后的生活和学习的过程中,我们一定会把实习的精神带到生活中,不畏困难,勇往直前!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 聊天室 课程设计 报告