计算机网络聊天室课程设计报告书_第1页
计算机网络聊天室课程设计报告书_第2页
计算机网络聊天室课程设计报告书_第3页
计算机网络聊天室课程设计报告书_第4页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、下载可编辑计算机网络课程设计报告设计题目:聊天室同组人:王巍瑾马志超周旭同组人学号:201515151052015151510420151515138专业班级:计科 153指导教师:金松林日期:2017年 6 月 12 日16 日.专业 .整理 .下载可编辑一、 题目意义和需求分析1. 题目意义即时通讯或在线聊天是目前Internet上最为流行的通讯方式,用户之间通过文字传输信息。这是一种可以让使用者在网络上建立私人聊天室的实时通讯服务。除了简单的文字信息,使用者之间还可以互相发送文件、文档、音乐、视频等文件。只要与服务器,无论对方在天涯海角,双方隔得多远都没有问题。消息的实时更新,拉近了我们

2、相知的桥梁,文件的相互传输,使同事之间办公更方便快捷。2. 需求分析a. 注册当选择注册时,创建一个 File 文件类,载入“ user.txt ”,判断用户名是否已经存在,用户名有效后写入“user.txt”。b. 登录去“user.txt ”读取用户数据,验证用户名是否存在,验证用户密码是否正确,如果以上验证全部正确,返回客户端信息,提示登陆成功进入聊天界面。c. 聊天所有已登录的用户的名称都会在列表中显示, 然后就可以选择其中一个或多个发起聊天。接收用户聊天信息,当用户发送聊天信息时,服务端将会收到客户端用 Socket 传输过来的聊天信息对象,然后将其转换为 Message对象,返回聊

3、天信息,然后系统从 Message中提取消息类型,再根据类型将消息转化后通过 Socket 转发到相应的用户。d. 文件传输在聊天的基础上增加了一个文件传输功能。同事之间办公难免有一些资料的来往,在登录列表中选择一个用户或多个用户发送文件,等对方确认接收后即可建立连接进行文件传输。二、设计说明聊天室总体分为三个模块,主要包括注册登录,聊天模块,文件传输模块。系统运行在 java 环境中,要求java 环境为 JDK 1.8+ ;设计中的重点是通过Java 中的 ServerSocket 搭建 TCP服务器,通过在客户端创建Socket套接字连接服务器,然后通过ObjectOutputStrea

4、m来发送Message(数据消息的封装类)对象让服务器接受。通过线程来存储来存储用户.专业 .整理 .下载可编辑的 Socket 连接状态,接受并处理用户发过来的信息,返回处理信息。客户机也通过线程来接受服务器的处理数据做出响应。设计的难点是文件的传输,首先通过原有的服务器获得目标客户机的IP 地址和端口,然后在客户机上建立服务器, 通过要发送的文件的客户机连接接受文件的客户机用 DataInputStream 和 DataOutputStream 来推送到输入、输出流。然后客户机接受并保存。三、系统详细设计1. 功能模块聊天系统账户聊天跟向好登注好友友发录册聊送天文件2. 流程图.专业 .整

5、理 .下载可编辑开始N开启服务器Y打开登陆窗口登陆注册NY账号密码是否用户是否已存在正确YN登陆成功注册成功聊天窗口NN选择一个或多双击个好友水深火热的聊天选择文件进行传输Y等待对方确认Y是否下线正在传输N传输完成Y结束.专业 .整理 .下载可编辑四、程序源代码及注释public ChatRoom(String u_name, Socket client) / 赋值name = u_name;clientSocket = client;onlines = new Vector();setTitle(name);setResizable(false);setDefaultCloseOperati

6、on(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();text

7、Area.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);getConte

8、ntPane().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)

9、;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);.专业

10、.整理 .下载可编辑list.setCellRenderer(new CellRenderer();list.setOpaque(false);Border etch = BorderFactory.createEtchedBorder(); list.setBorder(BorderFactory.createTitledBorder(etch,"<"+u_name+">"+" 在线 用 户 :",TitledBorder.LEADING,TitledBorder.TOP,new Font("sdf"

11、, 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,

12、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, 2

13、45, 15); getContentPane().add(lblNewLabel);try oos=newObjectOutputStream(clientSocket.getOutputStream();/ 记录上线客户的信息,并发送给服务器Message toMsg = new Message(); toMsg.setType(0); toMsg.setName(name); toMsg.setTimer(getTimer(); oos.writeObject(toMsg);oos.flush();/ 启动客户接收线程CThread = new ClientInputThread();C

14、Thread.start(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace();/ 发送按钮btnNewButton_1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) .专业 .整理 .下载可编辑String info = textArea_1.getText();List to = list.getSelectedValuesList();if (to.size() <

15、; 1) JOptionPane.showMessageDialog(getContentPane(), "请选择聊天对象");return;if (to.toString().contains(name+"(我 )") JOptionPane.showMessageDialog(getContentPane(), " 不能向自己发送信息 "); return;if (info.equals("") JOptionPane.showMessageDialog(getContentPane(), "不能发送

16、空信息");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"+

17、 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," 正在传输文件中,您不能离开.",&qu

18、ot;ErrorMessage",.专业 .整理 .下载可编辑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(Wind

19、owEvent e) / TODO Auto-generated method stubif(isSendFile | isReceiveFile)JOptionPane.showMessageDialog(contentPane," 正在传输文件中,您不能离开.","ErrorMessage",JOptionPane.ERROR_MESSAGE);elseint result = JOptionPane.showConfirmDialog(getContentPane()," 您确定要离开聊天室 ");if (result = 0)

20、 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)

21、if (to.toString().contains(name+"(我 )") JOptionPane.showMessageDialog.专业 .整理 .下载可编辑(getContentPane(), "不能向自己发送文件 ");return;/ 双击打开文件文件选择框FileChoose chooser = new FileChoose();chooser.setDialogTitle("选择文件框 "); /标题哦 .chooser.showDialog(getContentPane(), "选择 ");/

22、这是按钮的名字 ./ 判定是否选择了文件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.s

23、etType(2);/请求发送文件toMsg.setSize(newLong(file.length().intValue();toMsg .setName(name);toMsg.setTimer(getTimer();toMsg.setFileName(file.getName();/记录文件的名称toMsg.setInfo("请求发送文件 ");/ 判断要发送给谁HashSet<String>set=newHashSet<String>();set.addAll(list.getSelectedValuesList();toMsg.setCli

24、ents(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 多用户

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论