欢迎来到天天文库
浏览记录
ID:10903805
大小:229.80 KB
页数:13页
时间:2018-07-08
《udp局域网聊天软件的设计与开发报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、UDP局域网聊天软件的设计与开发一、设计思想本课程设计主要是基于UDP的并用Java实现的简单的聊天程序。UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。虽然UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点,它有即时通信的功能。比如说,使用聊天程序聊天的时候,省去的了跟对方通信的时候的链接的麻烦,直接进行通信。U
2、DP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。UDP 支持一对一、一对多、多对一和多对多的交互通信。发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。接收方 UDP 对 IP 层交上
3、来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。Socket又称作套接字,它是使用标准Unix文件描述符(filedescriptor)和其它程序通讯的方式。使用send()和recv()让你更好的控制数据传输。在Java网络编程中,socket相当于应用程序的港口码头;在计算机网络中,套接字由ip地址和端口号组成,为进程之间通信提供地址。两个主机进行通信实际上就是两个主机中的应用进程互相通信,应用进程之间的通信又称为端到端的通信。为应用进程之间的通信提供运输服务的是运输层的运
4、输协议,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。在Java中,用于实现基于UDP的聊天程序,使用两个重要的类(DatagramSocket类和DatagramPacket类)。DatagramSocket类表示用来发送和接收数据报包的套接字。数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。在DatagramSocket上总是启用UDP广播发送。为了接收广播包,应该将Dat
5、agramSocket绑定到通配符地址。在某些实现中,将DatagramSocket绑定到一个更加具体的地址时广播包也可以被接收。DatagramPacket类表示数据报包。数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。不对包投递做出保证。服务程序工作在服务器的某个端口上,一旦启动服务,它将在这个端口上监听,等待客户程序发来请求,当有客户连接到该端口,accept()方法就返回一个Socket对象,可
6、以用该对象获得一个输入输出流。服务器的套接字用服务器套接字类(ServerSocket)来建立。具体实现如下:(1)建立一个服务者,端口为5000。(2)服务者永远等待,一旦客户送来正确的请求,连接至该端口,accept()方法就返回一个Socket对象。(3)用返回的Socket对象创建数据输入流类的实例in。用返回的Socket对象创建数据输出流的实例out。以上实例in和out是服务者用于从客户接受输入信息和向客户程序发送信息所用。此外,还需要用方法readline()和println()读取或输出一行数据。(4)s
7、oc.close()关闭Socket。-13-UDP局域网聊天软件的设计与开发二、算法流程图本程序的核心算法流程图如下图所示:用户1封装数据报解析数据报目的IP与主机IP比较接受消息用户2是否传输数据报丢弃发送数据报图1程序算法流程图三、源代码importjava.awt.AWTEvent;importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Rectangle;importjava.awt.TextArea;importjava.awt.Toolkit;
8、importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowEvent;importjava.io.IOException;importjava.net.DatagramP
此文档下载收益归作者所有