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

一、目标

基于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

时间: 2024-12-23 03:59:21

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

curl基于URL的文件传输工具

简介 cURL是一款开源的基于URL的文件传输工具,支持HTTP.HTTPS.FTP等协议,支持POST.cookie.认证.扩展头部.限速等特性. curl命令用途广泛,比如下载.发送http请求.指定http头部等. wget是个专职的下载利器,简单,专一,极致:而curl可以下载,但是长项不在于下载,而在于模拟提交web数据,对请求报文进行设置,从而对网页进行调试. wget支持递归下载,curl不支持.所以区分下来就是下载数据使用wget,网页调试使用curl. 常用功能 curl UR

用C#Winform写个简单的批量清空文件内容和删除文件的小工具

用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013创建一个项目并添加到Github的教程,请参考(http://www.admin10000.com/document/4004.html).简单来说,就是先用VS创建项目:然后在Github网站上创建一个Respo(本项目的代码托管项目),记下(https://*.git)那个地址:最后用"提交&q

Windows下基于UDP的可靠传输协议实现

前言:在某互联网公司实习了好几个月,有一个月都是在做基于UDP协议的应用层软件开发,目的是要用在流媒体服务器上,传输高清视频图像帧.整个开发过程,从0到最后完成了几百兆以上的大文件可靠传输,但效率方面还需要进一步提升.UDP网络传输协议部分编程,由于存在丢包问题,确实有点复杂,现在分享一下自己的开发经验. #ifndef UDPNONBLOCKINGOUTPUT #define UDPNONBLOCKINGOUTPUT #include "winsock.h" #include <

强大的pdf文件操作小工具——PDFtk的小白用法

前言 作为程序员,大家都知道的,总是会被技术小白问各种跟编程没什么关系的硬件.软件问题.曾经被一技术小白同事问到有没有什么办法合并pdf文件,当时自己也是一头雾水,因为自己工作生活很少会去操作pdf文件,而当时公司对开发人员的电脑权限管理很严格,不论是上网还是安装软件,都受到很大限制,最后硬着头皮忙活了一阵子也没在解决. 前两天在写批处理程序的时候,发现批处理程序是有合并文件的命令的,我忽然想起之前这个同事的问题,就试了一下合并pdf,然而并不行.虽然失落了一下,但本着学习的精神还是百度了一下关

csv文件生成小工具

运维经常遇到客户要求下载某些数据列表的需求.一般我们是提供一个csv格式的文件. 如果用shell来做这件事的,通常是两种方法: 1.捕获终端输出,后续对输出做一定处理.但是终端输出实际上已经丢失了很多格式信息,很难做到完善处理. 2.用mysql内置的FILE命令一次性生成文件.mysql内置的函数功能有限,没法做到比较好的输出格式化. 所以选择了python来做. 主要注意几点: 1.我们的数据库是使用utf8编码.所以生成的csv文件默认话就是utf8编码.实际上也不应该转码,因为utf8

自己写的 根据编码搜索文件的小工具

文件.目录搜索的小工具 用正则式限制文件名.关键字.目录 开始是专门为了搜索GBK和UTF8两种编码的文件,现在可以制定多种编码方式来搜索文件 本科生,代码可能很不规范 因为windows下好像没有grep,win7默认的搜索用起来也不习惯,search my file也不支持搜索中文,所以开始试着按自己想法尝试写这个东西用来搜源码文件. https://github.com/wo4li2wang/MSearcher 参数 ? -f ?搜索的文件夹,可以用正则式表示? -k ?搜索文件包含的关键

windows与Linux实现文件传输Winscp工具的使用

WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件..winscp也可以链接其他系统,比如linux系统 Winscp最大的特性是图形化界面,能够实现像windows一样的拖拽功能,同时支持批量处理文件和命令行. 这里假设我们已经拥有了WinSCP软件运行的环境(一台Windows操作系统和一台Linux服务器).WinSCP软件安装包已经下载好,如果不会下载,在百度搜索中输入WinSCP,出来的第一

Linux内文件基于vsFPT的文件传输

1:搭建yum源 2:安装lftp yum install vsftp 注:在linux下,查看系统安装啦哪些软件[rpm -qa]便可查看 查看特定的软件包内部的文件[rpm -ql  +文件名 ] 3:当然这些环境的准备当然离不开软件的安装,如果安装不了vsftpd可以先下载在安装 https://pkgs.org/download/vsftpd   下载对应的VSFTP就可以了 4:打开文件包 rpm -ql vsftpd-3.0.2-10.el7.x86_64 vsftp的配置文件放在/

基于Tcp通讯的文件传输小例子 (wpf)

源码下载 示例基于wpf技术 是networkcomms2.3.1自带的示例 通讯框架 英国的networkcomms2.3.1C#通信框架 using System; using System.Collections.Generic; using System.Linq; using System.Text; using NetworkCommsDotNet; using System.ComponentModel; using System.IO; namespace ExamplesWPF