码迷,mamicode.com
首页 > 其他好文 > 详细

局域网内基于UDP的文件传输小工具

时间:2015-04-07 11:35:42      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

一、目标

基于UDP来设计一个文件传输的小工具,以此来了解UDP协议的特点。

内容:

基本要求:

输入对方IP地址,对方如果存在,可以给对方发送文件。

扩展要求:

(1)工具具有友好的用户界面;

(2)局域网内使用该工具的两台主机可以互相进行文字通信;

(3)自动按照一定频率扫描局域网内其他开启了该工具的主机,并在界面上用列表显示出来;

(4)传输文件和文字内容时,直接选择界面上已经显示出来的存活主机,不需要手动输入IP地址。

二、设计实现

环境:

Ubuntu14.04+Gcc4.8+Eclipse

关键环节:

1. 用户点对点通信,通信内容为文本消息和文件传输,利用ip服务器来记录上线的用户,用户上线下线都自动通知配置的IP服务器,同时用户可以随时想IP服务器请求在线的所有用户。

技术分享

2. 使用poll来实现IO复用,监听标准输入文件描述符的读写和通信套接字的读写。

技术分享

3. 制定命令”msgs”,”file”,”list”,”q”等命令。

    使用方法:

    msgs ip port message,代表向指定ip的端口发送文本消息message。

    file ip port filepath, 代表向指定ip的端口传输文本filepath。

    list,代表向配置的IP服务器请求在线用户。

    q,代表推出客户端。

4. 客户通信过程详解

在整个客户端的运行过程中,涉及到三种消息,分别是在线用户ip显示、文本消息发送与显示、文件的发送与存储。因此,我们在每个消息包上用一个字节来进行标记,用来区分ip列表消息、文本消息和文件传输。

同时,为了保证本件传输的完整性,我们在文件传输的时候,又在消息头上增加了一个文件头结构体,其中记录了文件名、文件大小和已发送大小。

技术分享

三、程序效果

1. 启动IP服务器

技术分享

2. 启动两个示例客户端,两个客户端之间、以及客户端与服务器之间,可以通过相应的msgs,file,list,q等命令进行通信。

实验成功传输文本消息、图片和视频等各类文件,大文件(两部大小为5G的电影)的传输速度大概为4M/s,由于局域网网络简单,不会丢包,数据包的顺序正确,所以保证了数据的完整性和正确性。

通过实验发现,当传输大文件时,若发送数据过快,会造成数据包的丢失,因此,我们在发送间隔5毫秒。

下面是客户端1:

技术分享

客户端2:

技术分享

Ip服务器:

技术分享

文件传输效果图:

技术分享

技术分享

四、程序源码

https://github.com/panzhengguang/Unix_Net_Programming/tree/master/UdpFileTrans

局域网内基于UDP的文件传输小工具

标签:

原文地址:http://www.cnblogs.com/panweishadow/p/4397524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!