




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档计算机网络课程设计报告设计题目: 聊天室 同组人姓名: 王巍瑾 马志超 周 旭 同组人学号: 20151515105 20151515104 20151515138 专业班级: 计科153 指导教师: 金松林 日 期: 2017年6月12日16日 一、 题目意义和需求分析1. 题目意义即时通讯或在线聊天是目前Internet上最为流行的通讯方式,用户之间通过文字传输信息。这是一种可以让使用者在网络上建立私人聊天室的实时通讯服务。除了简单的文字信息,使用者之间还可以互相发送文件、文档、音乐、视频等文件。只要与服务器链接,无论对方在天涯海角,双方隔得多远都没有问题。消息的实时更新,拉近了我们相知的桥梁,文件的相互传输,使同事之间办公更方便快捷。2. 需求分析a. 注册当选择注册时,创建一个File文件类,载入“user.txt”,判断用户名是否已经存在,用户名有效后写入“user.txt”。b. 登录去“user.txt”读取用户数据,验证用户名是否存在,验证用户密码是否正确,如果以上验证全部正确,返回客户端信息,提示登陆成功进入聊天界面。c. 聊天所有已登录的用户的名称都会在列表中显示,然后就可以选择其中一个或多个发起聊天。接收用户聊天信息,当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其转换为Message对象,返回聊天信息,然后系统从Message中提取消息类型,再根据类型将消息转化后通过Socket转发到相应的用户。d. 文件传输在聊天的基础上增加了一个文件传输功能。同事之间办公难免有一些资料的来往,在登录列表中选择一个用户或多个用户发送文件,等对方确认接收后即可建立连接进行文件传输。二、设计说明聊天室总体分为三个模块 ,主要包括注册登录,聊天模块,文件传输模块。系统运行在java环境中,要求java环境为JDK 1.8+;设计中的重点是通过Java中的ServerSocket搭建TCP服务器,通过在客户端创建Socket套接字连接服务器,然后通过ObjectOutputStream来发送Message(数据消息的封装类)对象让服务器接受。通过线程来存储来存储用户的Socket连接状态,接受并处理用户发过来的信息,返回处理信息。客户机也通过线程来接受服务器的处理数据做出响应。设计的难点是文件的传输,首先通过原有的服务器获得目标客户机的IP地址和端口,然后在客户机上建立服务器,通过要发送的文件的客户机连接接受文件的客户机用DataInputStream 和DataOutputStream 来推送到输入、输出流。然后客户机接受并保存。三、系统详细设计1. 功能模块2. 流程图注册向好友发送文件跟好友聊天登录聊天账户四、程序源代码及注释public ChatRoom(String u_name, Socket client) / 赋值name = u_name;clientSocket = client;onlines = new Vector();setTitle(name);setResizable(false);setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);setBounds(200, 100, 688, 510);contentPane = new JPanel();setContentPane(contentPane);contentPane.setLayout(null);/ 聊天信息显示区域JScrollPane scrollPane = new JScrollPane();scrollPane.setBounds(10, 10, 410, 300);getContentPane().add(scrollPane);textArea = new JTextArea();textArea.setEditable(false);textArea.setLineWrap(true);/激活自动换行功能 textArea.setWrapStyleWord(true);/激活断行不断字功能 textArea.setFont(new Font(sdf, Font.BOLD, 13);scrollPane.setViewportView(textArea);/ 打字区域JScrollPane scrollPane_1 = new JScrollPane();scrollPane_1.setBounds(10, 347, 411, 97);getContentPane().add(scrollPane_1);final JTextArea textArea_1 = new JTextArea();textArea_1.setLineWrap(true);/激活自动换行功能 textArea_1.setWrapStyleWord(true);/激活断行不断字功能 scrollPane_1.setViewportView(textArea_1);/ 关闭按钮final JButton btnNewButton = new JButton(关闭);btnNewButton.setBounds(214, 448, 60, 30);getContentPane().add(btnNewButton);/ 发送按钮JButton btnNewButton_1 = new JButton(发送);btnNewButton_1.setBounds(313, 448, 60, 30);getRootPane().setDefaultButton(btnNewButton_1);getContentPane().add(btnNewButton_1);/ 在线客户列表listmodel = new UUListModel(onlines) ;list = new JList(listmodel);list.setCellRenderer(new CellRenderer();list.setOpaque(false);Border etch = BorderFactory.createEtchedBorder();list.setBorder(BorderFactory.createTitledBorder(etch, +在线用户:, TitledBorder.LEADING, TitledBorder.TOP, new Font(sdf, Font.ITALIC, 20), Color.black);JScrollPane scrollPane_2 = new JScrollPane(list);scrollPane_2.setBounds(430, 10, 245, 375);scrollPane_2.setOpaque(false);scrollPane_2.getViewport().setOpaque(false);getContentPane().add(scrollPane_2);/ 文件传输栏progressBar = new JProgressBar();progressBar.setBounds(430, 390, 245, 15);progressBar.setMinimum(1);progressBar.setMaximum(100);getContentPane().add(progressBar);/ 文件传输提示lblNewLabel = new JLabel(文件传输信息栏:);lblNewLabel.setFont(new Font(SimSun, Font.PLAIN, 12);lblNewLabel.setBackground(Color.WHITE);lblNewLabel.setBounds(430, 410, 245, 15);getContentPane().add(lblNewLabel);try oos = new ObjectOutputStream(clientSocket.getOutputStream();/ 记录上线客户的信息,并发送给服务器Message toMsg = new Message();toMsg.setType(0);toMsg.setName(name);toMsg.setTimer(getTimer();oos.writeObject(toMsg);oos.flush();/ 启动客户接收线程CThread = new ClientInputThread();CThread.start(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/ 发送按钮btnNewButton_1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String info = textArea_1.getText();List to = list.getSelectedValuesList();if (to.size() 1) JOptionPane.showMessageDialog(getContentPane(), 请选择聊天对象);return;if (to.toString().contains(name+(我) JOptionPane.showMessageDialog(getContentPane(), 不能向自己发送信息);return;if (info.equals() JOptionPane.showMessageDialog(getContentPane(), 不能发送空信息);return;Message toMsg = new Message();toMsg.setType(1);toMsg.setName(name);String time = getTimer();toMsg.setTimer(time);toMsg.setInfo(info);HashSet set = new HashSet();set.addAll(to);toMsg.setClients(set);/ 自己发的内容也要现实在自己的屏幕上面textArea.append(time + 我对 + to + 说:rn + info + rn);sendMessage(toMsg);textArea_1.setText(null);textArea_1.requestFocus(););/ 关闭按钮btnNewButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(isSendFile | isReceiveFile)JOptionPane.showMessageDialog(contentPane,正在传输文件中,您不能离开.,Error Message, JOptionPane.ERROR_MESSAGE);elsebtnNewButton.setEnabled(false);Message toMsg = new Message();toMsg.setType(-1);toMsg.setName(name);toMsg.setTimer(getTimer();sendMessage(toMsg);b = false;);/ 离开this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) / TODO Auto-generated method stubif(isSendFile | isReceiveFile)JOptionPane.showMessageDialog(contentPane,正在传输文件中,您不能离开.,Error Message, JOptionPane.ERROR_MESSAGE);elseint result = JOptionPane.showConfirmDialog(getContentPane(),您确定要离开聊天室);if (result = 0) Message toMsg = new Message();toMsg.setType(-1);toMsg.setName(name);toMsg.setTimer(getTimer();sendMessage(toMsg);/CTerrupt();b = false;);/ 列表监听list.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) List to = list.getSelectedValuesList();if (e.getClickCount() = 2) if (to.toString().contains(name+(我) JOptionPane.showMessageDialog (getContentPane(), 不能向自己发送文件);return;/ 双击打开文件文件选择框FileChoose chooser = new FileChoose();chooser.setDialogTitle(选择文件框); / 标题哦.chooser.showDialog(getContentPane(), 选择); / 这是按钮的名字./ 判定是否选择了文件if (chooser.getSelectedFile() != null) / 获取路径filePath = chooser.getSelectedFile().getPath();File file = new File(filePath);/ 文件为空if (file.length() = 0) JOptionPane.showMessageDialog (getContentPane(),filePath + 文件为空,不允许发送.);return;Message toMsg = new Message();toMsg.setType(2);/ 请求发送文件toMsg.setSize(new Long(file.length().intValue();toMsg .setName(name);toMsg.setTimer(getTimer();toMsg.setFileName(file.getName(); / 记录文件的名称toMsg.setInfo(请求发送文件);/ 判断要发送给谁HashSet set = new HashSet();set.addAll(list.getSelectedValuesList();toMsg.setClients(set);sendMessage(toMsg););五、实验数据、结果分析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所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年特岗教师招聘考试美术专业试题分析与预测
- 看守所民警安全知识培训课件
- 2025年特种作业类危险化学品安全作业重氮化工艺作业-磺化工艺作业参考题库含答案解析
- 看图说话跳绳课件
- 2025年特种作业类危险化学品安全作业过氧化工艺作业-聚合工艺作业参考题库含答案解析
- 国有建设用地使用权出让合同
- 2024学年七年级下学期数学重难点压轴题练习《同底数幂的乘法》含答案解析
- 2025年特种作业类危险化学品安全作业氯化工艺作业-光气及光气化工艺作业参考题库含答案解析
- 2025年特种作业类危险化学品安全作业氟化工艺作业-重氮化工艺作业参考题库含答案解析
- 2025年特种作业类危险化学品安全作业化工自动化控制仪表作业-硝化工艺作业参考题库含答案解析
- 读书分享-《教育的情调》
- 《材料力学》说课-课件
- 飞灰螯合物运输服务方案
- (完整版)沪教牛津版小学一至六年级英语单词汇总(最新)
- JJF 1587-2016 数字多用表校准规范-(高清现行)
- 完整课件-西方经济学下册(第二版)
- 机械制图教学通用课件(全套)
- 钢化玻璃标准
- 天星择日的基本原理
- 球阀自动泄压计算
- 期权从业考试题含答案84分
评论
0/150
提交评论