通信软件实验报告基于UDP文件传输程序设计与实现.docx
《通信软件实验报告基于UDP文件传输程序设计与实现.docx》由会员分享,可在线阅读,更多相关《通信软件实验报告基于UDP文件传输程序设计与实现.docx(6页珍藏版)》请在冰豆网上搜索。
基于UDP的文件传输程序设计与实现(服务端)
一、程序设计思路
1.UDP(UserDatagramProtocol,用户数据报协议)简介
UDP为无连接的通信协议,其主要目的在于处理传输少量的数据。
与TCP不同的是,UDP在传输数据之前不需要建立通信链接。
仅须设置计算机间的IP及使用相同的端口,即可互相传输信息,因此UDP只提供单向的数据传输,如图1.1所示:
单向无连接传输模式
接收
发送
主机
主机
图1.1UDP通信协议
由于UDP不须先建立连接,这样节省了TCP建立连接所需的时间,因此适合于在主机间做单向的数据传输。
但UDP不提供数据错误的侦测以及数据重送等功能,因此并不确保数据能完整发送。
2.java实现UDP程序思路
UDP程序使用数据报的形式出现,需要使用以下两个类。
l数据报的内容:
DatagramPacket。
l发送和接收数据报:
DatagramSocket。
在开发TCP程序的时候,是先有服务端,之后再进行客户端的开发。
而UDP要运行的时候,则应该先运行客户端,之后再运行服务端。
在运行UDP程序的时候先运行客户端,阻塞等待服务端发过来的信息,服务端开启后,向目标端发送信息之后便关闭了服务端,并不阻塞等待客户端的响应。
二、实现关键技术点
1.服务端界面布局
服务端界面使用的是边框布局管理器,边框布局管理器是每个JFrame的内容窗格的默认布局管理器。
流布局管理器完全控制每个组件的放置位置,边框布局管理器则不然,它允许为每个组件选择一个放置位置。
可以选择把组件放在内容窗格的中部、北部、南部、东部或者西部。
一般来讲是先放置边缘组件,剩余的可用空间由中间组件占据。
当容器缩放时,边缘组件的尺寸不会改变,而中部组件的大小会发生变化。
在添加组件时可以指定BorderLayout类中的CENTER、NORTH、SOUTH、EAST和WEST常量。
图2.1给出了服务器的界面布局:
图2.1UDP文件传输系统界面布局
2.文件选择器
Swing中提供了JFileChooser类,它可以显示一个文件对话框,其外观与本地应用程序中使用的文件的对话框基本一样。
JFileChooser是一个模式对话框。
接收文件的按钮被自动地标签为Open或者Save。
图2.2为文件选择器运行在UDP程序上的截图。
图2.2文件选择对话框
3.发送类Sender的设计
发送文件时首先要知道目标主机的名称,所以Sender类应该包含目标主机属性,来实现目标主机的动态设定。
还必须包含目标主机的端口。
在方法上需要一个判断文件是否传输的函数,如果传输成功,则必须向系统返回值,以告知系统返回成功。
以下为Sender类的设计。
publicclassUDPSend{
privateDatagramSocketsocket;
privateDatagramPacketpack;
privateStringhost;//目标主机
privateintport;//目标主机的端口
publicUDPSend(DatagramSocketsocket,Stringhost,intport)
{
this.socket=socket;
this.host=host;
this.port=port;
}
publicbooleansendFile(Pathpath)throwsIOException
{
booleanflag=false;
byte[]bytes=Files.readAllBytes(path);
Stringcontent=newString(bytes);
pack=newDatagramPacket(content.getBytes(),content.length(),InetAddress.getByName(host),port);
socket.send(pack);
flag=true;
returnflag;
}
4.客户端的简单设计
对UDP程序是否传输成功文件需要设计一个简单的客户端来接收服务端的文件信息。
这个客户端不包含对接收信息的处理,显示的结果仅仅是传输文件里面的内容信息,并没有形成新的文件。
三、运行结果截图
1.先运行客户端程序
2.运行服务端程序
3.填入发送所需要的信息并选择文件传送。
4.发送结果。
5.接收结果
四、小组成员分工
分工一:
负责界面设计。
分工二:
负责服务端和测试客户端的程序设计。
五、设计难点及解决问题的收获
设计难点:
1.在设计程序界面时使用的是java的Layout布局管理器,对组件的位置、大小、字体的颜色等设计不灵活。
2.在使用文本框获取所需的数字信息时,数据类型的转换出现了困难。
3.在选取所需传输的文件时,帅选文件夹里的子文件。
4.在获取文件路径时,经常获取的路径格式不正确。
5.传输文件时文件编码的问题可能导致接收的文件乱码。
收获:
在解决问题的同时提高了自身的编程能力,并学到了以前没接触过的java程序设计问题,并对UDP协议有着更深一步的理解。
在解决过程中,提高了独立解决问题的能力,并感受到了团队合作的魅力。