计算机网络聊天软件的设计与实现.docx_第1页
计算机网络聊天软件的设计与实现.docx_第2页
计算机网络聊天软件的设计与实现.docx_第3页
计算机网络聊天软件的设计与实现.docx_第4页
计算机网络聊天软件的设计与实现.docx_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

课 程 设 计 课程名称 通信与网络课程设计 题目名称 计算机网络聊天软件的设计与实现 学生学院 自动化 专业班级 11电子信息科学与技术(1) 学生姓名 胡建东 杜彦锟 陈啟宏 刘琦姮 指导教师 谭北海 2015年 1月 10日广东工业大学课程设计任务书一、课程设计的内容目的:熟悉通信和计算机网络理论,掌握网络编程的知识和技能(自选熟悉的编程软件实现,java,C+等皆可)任务:在局域网,基于windows平台完成聊天软件客户端的安装并进行文字、图片等通信演示。二、课程设计的要求与数据1、不可抄袭已有的聊天软件或别人的成果,但可借鉴和参考(课参考主流聊天软件MSN或QQ等,分析聊天程序的功能需求。);2、突出各个小组在本课程设计中做了那些内容;3、 采用自己熟悉的开发环境和语言完成设计任务,如:Java、C+、Visual Basic、SQL server等。4、课程设计报告内容包括,课程设计的目的、设计任务、要求、设计说明书。三、课程设计应完成的工作1、采用套接字实现网络中的数据传输2、尽量使用某个或某些应用层的协议实现系统的部分功能3、系统设计规范合理,操作流程方便简单四、课程设计进程安排序号设计各阶段内容地点起止日期1了解课程设计任务实2-2122015/1/52小组成员确定并配置软件环境宿舍2015/1/63组员分工并寻找资料自学宿舍2015/1/74软件初步完成并调试宿舍2015/1/86验收设计成果及导师评分实2-2122015/1/9项目分工表组员 项目贡献度 负责模块胡建东 25% 代码编写杜彦锟 25% 代码编写陈啟宏 25% 资料搜集/软件后期校正刘琦姮 25% 报告编写及意见提出五、收集的资料及主要参考文献1.java尚学堂马士兵视频教程2.百度文库相关文献目录模块及其原理介绍31.设计说明32.需求分析33.概要设计34.功能及成果45.主要运行界面46.设计思路及其步骤57主要程序代码88.测试结果:159.总结:1510.参考文献:1611.项目分工表IV21模块及其原理介绍1. 设计说明在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ、MSN,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个有简单聊天功能的网络聊天程序;而且通过制作该程序还能更好的学习网络软件编程知识。本课程适用于软件工程等本科专业。参加本课程设计的学生,应当认真完成本课程设计的全部过程。并以最终课程设计成果来证明其独立完成各种实际任务的能力。从而,反映出理解和运用本课程知识的水平和能力。2.需求分析网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过广播消息进行实时交谈。 在当今信息时代,越来越多的聊天工具被应用,java语言是当今流行的网络编程语言,它具有面向对象,与平台无关,安全,多线程等特点。使用java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的的,嵌入式设备进行应用程序的开发。有利于软件的维护和继承,锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力。 本程序正是用java语言实现了简单聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包等3.概要设计在局域网,基于windows平台完成聊天软件客户端的安装并进行文字、图片等通信演示。设计基于JAVA SDk环境和Eclipse开发环境,可以在一般的装有windows系统的主机上运行,使用JAVA开发语言。网络传输方面采用TCP/IP网络传输协议4.功能及成果 运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包以及java.util包等。程序实现了聊天室的基本功能,其中有:1、启动服务器端。2、启动客服端。3、用户可自定义连接的服务器IP地址进行连接。4、建立双方连接后客户的提示已连接,并阻止重复连接。5、用户可以自定义昵称6、发送信息(实现按回车键发送消息或按客户的“发送”按钮发送消息)。5.主要运行界面主要由类Frame来实现,界面实际总体如下:1.可输入昵称的文本框,2.显示本机IP地址;3.修改要连接服务器IP地址进行连接;4.建立连接及发送文本内容的按钮; 5.展示聊天消息记录并配有时间记录和昵称;6.设计思路及其步骤6.1 实现弹出窗口、关闭窗口以及窗口界面基本布局;6.2. 实现TextField事件处理;6.3 服务器设计;6.4 实现客户端连接服务器;6.5实现客户端向服务端发送数据,服务器能接收客户端发出数据; 6.6对服务器进行改进,利用列表存储连接的客户端,实现允许多个客户端进行连接;6.7客户端加入线程,实现客户端能向服务器发送数据并接收服务器转发的数据;6.8服务器加入线程,实现服务器能接收服务端发出数据并转发给客户端;6.9 测试完成,实现基本功能后,对设计进行改进,实现接收数据中显示系统时间;6.10实现接收数据中加入发送方IP地址;6.11修改客户端连接方式,客户可手动进行连接,而不是一启动就连接,避免出错;6.12实现客户端修改想要连接的服务器IP地址,无需进行代码修改;6.13 加入客户自定义昵称;6.14 实现接收数据中显示发送方昵称;6.15最后加入发送图片的功能7主要程序代码A:服务器端ChatServerimport .*;import java.io.*;import java.util.*;public class ChatServer boolean started = false;ServerSocket ss = null;List clients = new ArrayList();public static void main(String args) new ChatServer().start();public void start() try ss = new ServerSocket(8885);started = true; catch (BindException e) System.out.println(端口使用中。);System.exit(0); catch (IOException e) e.printStackTrace();try while (started) Socket s = ss.accept();System.out.println(a client connected!); / 用于调试Client c = new Client(s);new Thread(c).start();clients.add(c); catch (IOException e) e.printStackTrace(); finally try ss.close(); catch (IOException e) e.printStackTrace();class Client implements Runnable private Socket s;private DataInputStream dis = null;private boolean bConnected = false;private DataOutputStream dos = null;public Client(Socket s) this.s = s;try dis = new DataInputStream(s.getInputStream();dos = new DataOutputStream(s.getOutputStream();bConnected = true; catch (IOException e) e.printStackTrace();public void send(String str) throws IOExceptiontrydos.writeUTF(str);catch(IOException e)clients.remove(this);System.out.println(对方退出了);public void run() try while (bConnected) String str = dis.readUTF();/System.out.println(str);for(int i=0;iclients.size();i+)Client c = clients.get(i);c.send(str); catch (EOFException e) System.out.println(a client closeed); catch (IOException e) e.printStackTrace(); finally try if (dis != null)dis.close();if (dos != null)dos.close();if(s != null) s.close(); catch (IOException e) e.printStackTrace();B:客户端import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.sql.Date;import java.text.DateFormat;import java.util.Locale;import javax.swing.*;public class ChatClient extends Frame Socket s = null;DataOutputStream dos = null;DataInputStream dis = null;private boolean bConnected = false;/ private boolean tConnected = true;Thread Recv = new Thread(new RecvThread();TextField tfText = new TextField();TextField Text = new TextField();TextField otherIp = new TextField();TextField myIp = new TextField();TextField name = new TextField();JButton tconnect = new JButton(连接);JButton send = new JButton(发送);JButton sendPicture = new JButton(发送图片(未实现));JTextPane taContent = new JTextPane();JScrollPane jsp = new JScrollPane(taContent);JPanel panel1 = new JPanel(new GridLayout(3, 2);JPanel panel2 = new JPanel(new GridLayout(1, 3);JPanel panel = new JPanel(new BorderLayout();public static void main(String args) ChatClient client = new ChatClient();client.launchFrame();public void launchFrame() this.setLocation(500, 100);this.setSize(400, 600);this.setTitle(组员:胡建东、杜彦锟、陈啟宏、刘琦姮);add(jsp, BorderLayout.NORTH);panel1.add(new JLabel(昵称:);panel1.add(name);panel1.add(new JLabel(本机IP);try myIp.setText(InetAddress.getLocalHost().getHostAddress();panel1.add(myIp); catch (UnknownHostException e1) e1.printStackTrace();panel1.add(new JLabel(服务器IP);panel1.add(otherIp);panel2.add(send);panel2.add(sendPicture);panel2.add(tconnect);taContent.setPreferredSize(new Dimension(400, 400);panel.add(panel1, BorderLayout.NORTH);panel.add(tfText, BorderLayout.CENTER);panel.add(panel2, BorderLayout.SOUTH);add(panel, BorderLayout.SOUTH);pack();this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) disconnect();System.exit(0););tfText.addActionListener(new TFListener();send.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) ChatClient.this.send(););sendPicture.addActionListener(new TFListener() public void actionPerformed(ActionEvent e) ChatClient.this.sendPicture(););this.setVisible(true);tconnect.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (bConnected = false) ChatClient.this.setTitle(本机: + name.getText();ChatClient.this.setVisible(true);/ System.out.println(otherIp.getText() + ;);connect();Recv.start();if (bConnected) System.out.println(已连接,无需重复请求););public void connect() try / System.out.println(otherIp.getText();s = new Socket(otherIp.getText(), 8885);dos = new DataOutputStream(s.getOutputStream();dis = new DataInputStream(s.getInputStream();bConnected = true;taContent.setText(connected);/ System.out.println(connected); catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();public void disconnect() try if (dos != null)dos.close();if (dis != null)dis.close();if (s != null)s.close(); catch (IOException e) e.printStackTrace();public void send() String str = tfText.getText().trim();Date date = new Date(System.currentTimeMillis();DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM, Locale.CHINA);String time = df.format(date);/ taContent.setText(str);tfText.setText();try / dos.writeUTF(myIp.getText() + + time + n + str);dos.writeUTF(name.getText() + + time + n + str);dos.flush(); catch (IOException e1) e1.printStackTrace();public void sendPicture() File file = null;FileInputStream fis;try fis = new FileInputStream(file);byte buff = new bytefis.available();fis.read(buff);OutputStream os = s.getOutputStream();os.write(buff); os.flush(); fis.clos

温馨提示

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

评论

0/150

提交评论