ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:102.43KB ,
资源ID:20800321      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20800321.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于Winsock的简单聊天工具的方案设计书Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于Winsock的简单聊天工具的方案设计书Word文件下载.docx

1、等级优秀良好中等及格不及格课程设计态度评价出勤情况评价任务难度评价工作量饱满评价设计中创新性评价论文书写规范化评价综合应用能力评价综合评定等级 评阅人 谢昕 职称 教授 2011年6月27日 目录一、任务分析与方案设计 11任务分析 12.方案设计 1二、开发环境与工具 11.设计环境 11.1 eclipse开发平台介绍 22.基础知识 22.1java Socket网络编程简介 22.2套接字的介绍 22.3 TCP/IP协议简介 3三、关键技术与理论 31.JAVA编程技术 32.Java Socket网络编程接口 3四、相关图解及程序 41.体系结构设计 42.具体功能模块的分析 53

2、.程序代码: 5五、测试及结果分析 10六、心得体会 12七、参考文献 12一、任务分析与方案设计1任务分析随着计算机科学技术的发展,网络越来越深刻地改变着人们生活方方面面。各种基于网络的应用技术在人们的政治、经济、生活等各个方面都发挥着重要的作用。例如QQ、MSN都是基于Internet的即时聊天工具。它们比传统媒介具有数据量大、实时性强、操作简单成本低廉等优点。因而它们在现实生活中受到了广泛的欢迎。然而基于局域网的即时聊天工具却不如人意。为了适应现代信息化,教学局域网应运而生,而教学局域网内的即时通信则显得尤为重要。 基于局域网的即时通信软件的核心技术其实与基于Internet的即时通信软

3、件的设计技术是一样的,只是规模比较小。基于Internet的通信工具一般采用TCP或者UDP协议来实现的,开发技术已经非常成熟,它们不仅实现了即时聊天、文件传输等功能,而且还能够实现即时视频、语音聊天功能等。在局域网内,这类软件的设计比在Internet中设计更为简单。因为Internet是网络中的网络,结构更为复杂,遇到的情况要比在局域网中还要多。所以说局域网的聊天工具的设计要相对简单些。而且即时通信是一个终端连往一个即时通信网络的服务。即时通信不同于e-mail在于它的交谈是实时的。大部分的即时通信服务提供了presence awareness的特性显示联络人名单,联络人是否在线与能否和联

4、络人交谈。2.方案设计程序采用JAVA编程,利用java强大的基础类库,调用java中界面开发的swing和网络编程的net函数群来完成本次的java socket(网络套接字)网络即时通信工具的开发。在java中,可以把发送的信息看成是一个一个的对象,当我们利用socket链接把客户端和服务器链接起来以后,他们之间就可以以对象流的形式发送彼此需要通信的信息了。在java的网络编程中,最为核心的就是客户端和服务器相互取得socket的链接,只要能够能够取得链接,其他的工作基本上都是java的面向对象的编程思想去完成一些网络通讯的业务逻辑的处理。二、开发环境与工具1.设计环境开发程序的操作系统:

5、Windows7(在Windows XP、2000里也可以)编译工具:eclipse程序工程:JAVA工程,Server和Client网络环境:局域网(或互联网上运用,只要安装客户端并且知道服务器端的IP)1.1 eclipse开发平台介绍Eclipse是著名的跨平台的自由集成开发环境(IDE)。主要用来Java语言开发。Eclipse的本身只是一个框架平台,但是众多插件的支持,使得Eclipse拥有较佳的灵活性。许多软件开发商都以Eclipse为框架开发自己的IDE。另外由于eclipse是开源的,所以得到了广大用户的认可。Eclipse也于2001年11月被它的开发公司IBM公司贡献给开源

6、社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。2.基础知识2.1java Socket网络编程简介 Socket 有两种主要的操作方式:面向连接的和无连接的。面向连接的 sockets 操作就像一部电话,他们必须建立一个连接和一人呼叫。所有的事情在到达时的顺序与它们出发时的顺 序时一样。无连接的 sockets 操作就像是一个邮件投递,没有什么保证,多个邮件可能在到达 时的顺序与出发时的顺序不一样。 到底用哪种模式是邮应用程序的需要决定的。如果可靠性更重要的话,用面向连接的操作会好一些.比如文件服务器需要他们的数据的正确性和有序性。如果一些

7、数据丢失了,系统的有效性将会失去。一些服务器,比如间歇性地发送一些数据块,如果数据丢了的话,服务器并不想要再重新发过一次,因为当数据到达的时候,它可能已经过时了.确保数据的有序性和正确性需要额外的操作的内存消耗,额外的费用将会降低系统的回应速率。 无连接的操作使用数据报协议。一个数据报是一个独立的单元,它包含了所有的这次投递的信息。把它想象成一个信封吧,它有目的地址和要发送的内容。这个模式下的 socket 不需要连接一个目的的 socket,它只是简单地投出数据报。无连接的操作是快速的和高效的,但是数据安全性不佳。 面向连接的操作使用 TCP 协议。一个这个模式下的 socket 必须在发送

8、数据之前与目的地的 socket 取得一个连接。一旦连接建立了,sockets 就可以使用一个流接口:打开(-读-写-关闭)。所有的发送的信息都会在另一端以同样的顺序被接收.面向连接的操作比无连接的操作效率更低,但是数据的安全性更高。Java 降低了建立一个 sockets 程序的难度。每一个传输模式都被封装到了不同的类中。面向连接的类将会首先被我们讨论。到底用哪种模式是邮应用程序的需要决定的。如果可靠性更重要的话,用面向连接的操作会好一些。比如文件服务器需要他们的数据的正确性和有序性。一些服务器,比如间歇性地发送一些数据块,如果数据丢了的话,服务器并不想要再重新发过一次。因为当数据到达的时候

9、,它可能已经过时了。确保数据的有序性和正确性需要额外的操作的内存消耗,额外的费用将会降低系统的回应速率. 2.2套接字的介绍 多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCPIP协议交互提供了称为套接字(Socket)的接口。套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端面点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程非常非常简单的举例说明下:Socket=Ip address+ TCP/UDP port. 应用层通过传输

10、层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。2.3 TCP/IP协议简介TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP主要包括以下协议:IP:网间协议(Internet Protocol) ,负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。ICMP:网间报文控制协议(Internet Control Message Protocol)此协议处理网关和主机的差错和传送控制。TCP: 传输控制协议(Transmiss

11、ion Control Protocol)这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。三、关键技术与理论1.JAVA编程技术Java是Sun公司推出的一种编程语言。它是一种通过解释方式来执行的语言,语法规则和C+类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序叫做“Applet”(小应用程序),用编译器将它编译成类文件后,将它存在WWW页面中,并在HTML档上作好相应标记,用户端只要装上Java的客户软件就可以在网上直接运行“Applet”。 Java非常适合于企业网络和Internet环境,现在已

12、成为Internet中最受欢迎、最有影响的编程语言之一。 Java有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构 2.Java Socket网络编程接口 事实上网络编程,简单的理解就是两台计算机相互通讯数据而已。对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了。Java sdk提供一些相对简单的api来完成这些工作,socket就是其中之一。 对于java而言,这些api存在于这个包里面。因此,只要导入这个包就可以准备网络编程了。网络编程的基本模型就是客户机到服务器模型。简单的说,就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,

13、而另一个则只需要知道这个固定的位置,并去建立两者之间的联系。然后完成数据的通讯就可以了。这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端。基于这个简单的模型,就可以进入网络编程. 对于java而言已经简化了socket的编程接口。首先需要确定有关提供固定位置的服务方是如何建立的。java提供了serversocket来对其进行支持。事实上当创建该类的一个实力对象并提供一个端口资源,就建立了一个固定位置可以让其他计算机来访问。serversocket server=new serversocket(6789);这里稍微要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机

14、唯一服务的。另外端口号是从065535之间的,前1024个端口已经被tcp/ip作为保留端口,因此,分配的端口只能是1024个之后的。有了固定位置,现在所需要的就是一根连接线了。该连接线由客户方首先提出要求。因此java同样提供了一个socket对象来对其进行支持。只要客户方创建一个socket的实例对象进行支持就可以了。socket client=new socket(inetaddress.getlocalhost(),5678);客户机必须知道有关服务器的ip地址。对于这一点,java也提供了一个相关的类inetaddress。该对象的实例必须通过它的静态方法来提供。它的静态方法主要提供

15、了得到本机ip和通过名字或ip直接得到inetaddress的方法。 i/o操作总是和网络编程息息相关的。因为底层的网络是继续数据的。除非远程调用,处理问题的核心在执行上。否则,数据的交互还是依赖于io操作的。所以,你也必须导入java.io这个包。java的io操作也不复杂。它提供了针对于字节流和unicode的读者和写者,然后也提供了一个缓冲用于数据的读写。bufferedreader in=new bufferedreader(new inputstreamreader(server.getinputstream();printwriter out=new printwriter(ser

16、ver.getoutputstream();上面两句就是建立缓冲并把原始的字节流转变为unicode可以操作。而原始的字节流来源于socket的两个方法,getinputstream()和getoutputstream()方法,分别用来得到输入和输出。四、相关图解及程序1.体系结构设计 一般的通信工具,都采用客户端/服务器体系结构。客户端/服务器的结构包含:客户端和服务端。客户端访问和处理服务器上的数据,服务器接收和处理客户端的数据请求。这种模式的好处就是可以将一个系统分为两个独立的部分进行开发设计,便于软件开发。而且也把一个软件的功能交给两个部分去完成,则更加有效的利用了系统资源。 本程序中

17、也采用了简单的客户端/服务器模式。由于本程序比较简单,仅演示客户端与服务端进行通信。2.具体功能模块的分析由于该系统采用C/S模式,所以对功能模块进行划分时,就需要分服务器和客户端两部分进行。由于服务器的主要功能是等待接收并反馈客户端的信息,所以服务器需要信息输出模块和通信模块。其中通信模块包含信息发送模块和信息接收模块。而信息输出模块要做到当信息发生改变时及时更新。客户端同样也需要通信模块和信息输出模块,同时要互相通信,就要具备输入输出。具体模块划分见下图:服务器端: /* * 服务器端 * 简单的聊天界面 */package View;import java.awt.*;import ja

18、va.awt.event.*;import javax.swing.*;import .*;import java.io.*;import java.util.*;public class MyServer extends JFrame implements ActionListener /定义需要的组件 JTextField jtf; JLabel jl; JTextArea jta; JScrollPane jsp; JButton jb1,jb2; JPanel jp1,jp2,jp3; PrintWriter pw=null; public static void main(Strin

19、g args) MyServer ms=new MyServer(); /构造函数 public MyServer() /初始化组件 jp2=new JPanel(); jl=new JLabel(消息记录); jp2.add(jl); jta=new JTextArea(); jsp=new JScrollPane(jta); jtf=new JTextField(20); jb1=new JButton(发送 jb1.addActionListener(this); jb2=new JButton(取消 jb2.addActionListener(this); jp3=new JPanel

20、(); jp3.add(jtf); jp3.add(jb1); jp3.add(jb2); this.add(jp2,North this.add(jsp,Center this.add(jp3,South this.setSize(400,300); this.setTitle(聊天 服务器端 this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try /让服务器在8888端口监听 ServerSocket ss=new ServerSocket(8888); /等待客户端的链接 Socket

21、 s=ss.accept(); JOptionPane.showMessageDialog(this, 有客户端连接 /接受客户端发送来的消息 BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream(); /给客户端写数据的时候用 pw=new PrintWriter(s.getOutputStream(),true); /循环的读取客户端发来的信息 while (true) String info=br.readLine(); String time1=Calendar.getInstance()

22、.getTime().toLocaleString(); jta.append(客户端对服务器说: +rn+info+ 接收时间:+time1+ catch (Exception e) e.printStackTrace(); Override public void actionPerformed(ActionEvent arg0) if (arg0.getSource()=jb1) /把写的信息发送给客户端 String info=jtf.getText(); String time2=Calendar.getInstance().getTime().toLocaleString();服务

23、器对客户端说: 发送时间:+time2+ jtf.setText( pw.println(info); /清空输入框 else if(arg0.getSource()=jb2)客户端:/* * 客户端 * 简易聊天界面package Client;import java.util.Calendar;public class MyClient extends JFrame implements ActionListener JPanel jp1,jp2; MyClient mc=new MyClient(); public MyClient() jl =new JLabel( jp1=new J

24、Panel(); jp1.add(jl); jb2 =new JButton( jp2.add(jtf); jp2.add(jb1); jp2.add(jb2); this.add(jp1, this.setLocation(950,5);聊天 客户端 this.connect(); public void connect() /与服务器链接 Socket s=new Socket(127.0.0.1,8888); JOptionPane.showMessageDialog(this, 和服务器端连接成功 InputStreamReader isr=new InputStreamReader(s.getInputStream(); BufferedReader br=new BufferedReader(isr); pw=new PrintWriter(s.getOutputStream(),true); while(true) /不停的读接受的数据 String info=br.readLine(); String time1=Calendar.getInstance().getTime().toLocaleString(); jta.append( /把客户端发送的信息显示到jfa String time2 =Calendar.getInstance().getTime()

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1