最重要的是掌握UDP的基本概念和使用

UDP.h


#ifndef NETWORK_UDP_H
#define NETWORK_UDP_H
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <strings.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <ctype.h>
#endif //NETWORK_UDP_H

一切过程都在注释
service.c

//使用UDP实现文件的传输
#include "UDP.h"#define SPORT 7788
char buf[1024];
int main(int argc ,char *argv[]){int sockfd;FILE *fp;//使用标准IO存客户端发送过来的文件struct sockaddr_in s,c;//服务器地质结构,客户端地质结构bzero(&s,sizeof(s));//清空s.sin_family=AF_INET; //初始化s.sin_port=htons(SPORT);s.sin_addr.s_addr=htonl(INADDR_ANY);socklen_t len=sizeof(s);if ((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1){//选socket套接字perror("[socket]");return -1;}if ((bind(sockfd,(struct sockaddr *)&s,len))==-1){//进行IP地址加端口号绑定perror("[bind]");return -1;}//绑定成功就接受客户端要发送的文件名int ret;//用于检测recvfrom函数的返回值,检错。len=sizeof(c);ret=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&c,&len);if (ret==-1){perror("[recvfrom]");return -1;}//客户端发送过来的是一个文件的路径,所以这里需要对路径进行相应的分解char filename[100];int i=0,k=0;for ( i = strlen(buf); i >0 ; i--) {if (buf[i]!='/'){k++;} elsebreak;}//定位这个文件的名字strncat(filename,buf+(strlen(buf)-k)+1,k);char filepath[100]="/tmp/";strncat(filepath,filename,strlen(filename));printf("FILE : %s will be download!\n",filepath);//使用printf跟踪打印技术检错fp=fopen(filepath,"w+");//创建,可读可写if (fp==NULL){perror("[fopen]");return -1;}//制造空洞文件if ((truncate(filepath,1<<10))==-1){perror("[truncate]");return -1;}//清空buf空间来接受传过来的文件内容while (ret){bzero(buf,sizeof(buf));len=sizeof(c);ret=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&c,&len);if ((fwrite(buf,sizeof(char),ret,fp))==-1){perror("[fwrite]");exit(-1);}}printf("Download success!\n");
}

client.c

#include "UDP.h"char buf[1024];
int main(int argc,char *argv[]){int sockfd;char filepath[100]="/home/jacky/hujie.txt";struct sockaddr_in s;bzero(&s,sizeof(s));s.sin_family=AF_INET;s.sin_port=htons(7788);inet_pton(AF_INET,"192.168.200.134",&s.sin_addr.s_addr);if ((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1){//选择socketperror("[socket]");return -1;}//直接进行发送文件名int ret,ret_r;//用于检错if ((ret=sendto(sockfd,filepath,sizeof(filepath),0,(struct sockaddr *)&s,sizeof(s)))==-1){perror("[sento]");return -1;}//进行文件内容的数据传输FILE *fp;fp=fopen(filepath,"r");if (fp==NULL){perror("[fopen]");return -1;}//读取文件内容到buf中while (ret){bzero(buf,sizeof(buf));ret_r=fread(buf,sizeof(char ),1024,fp);if (ret_r==-1){perror("[fread]");return -1;}ret=sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&s,sizeof(s));//这里要注意传输内容的大小,是你读取到在buf中的大小,不能直接使用sizeof(buf)usleep(100);//防止出现粘包乱码}printf("transfer success\n");}

实验结果

世界上最详细的Linux C udp实现文件传输相关推荐

  1. 安卓手机的文件如何传到linux里去,如何在Linux下安装安卓文件传输助手

    CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了 如不雅你测验测验在 Ubuntu 下连接你的安卓手机,你也许可以尝尝 Linux 下的安卓文件传输助手. 如今,有可能一部分人想知 ...

  2. linux系统中的文件传输

    Linux系统中的文件传输 1 实验环境 2 scp命令 3 rsync命令 3.1 rsync和scp命令对比 3.2 rsync命令用法 4 文件的归档压缩 4.1 文件归档 4.2 文件压缩 4 ...

  3. Linux下几种文件传输命令 sz rz sftp scp

    vbs自动启动程序 64位系统编译的程序,在32位系统中运行会有问题 Linux下几种文件传输命令 sz rz sftp scp 2011-10-28 16:08:47|  分类: 默认分类 |  标 ...

  4. Android 系统(68)---使用Xshell在Windows系统和Linux系统之间进行文件传输

    使用Xshell在Windows系统和Linux系统之间进行文件传输 Windows系统在安装虚拟机centos系统之后,如何进行两者之间的文件传输和互操作,或者如何在Windows端使用Xshell ...

  5. linux系统中加密文件传输助手,Linux 下的安卓文件传输助手!

    如果你尝试在 Ubuntu 下连接你的安卓手机,你也许可以试试 Linux 下的安卓文件传输助手.本质上来说,这个应用是谷歌 macOS 版本的一个克隆.它是用 Qt 编写的,用户界面非常简洁,使得你 ...

  6. linux手机 电脑传文件怎么安装,如何在 Linux 下安装安卓文件传输助手

    如果你尝试在 Ubuntu 下连接你的安卓手机,你也许可以试试 Linux 下的安卓文件传输助手. 本质上来说,这个应用是谷歌 macOS 版本的一个克隆.它是用 Qt 编写的,用户界面非常简洁,使得 ...

  7. 安卓传输文件Linux,你知道Linux下的安卓文件传输助手的作用?

    如果你尝试在 Ubuntu 下连接你的安卓手机,你也许可以试试 Linux 下的安卓文件传输助手.本质上来说,这个应用是谷歌 macOS 版本的一个克隆.它是用 Qt 编写的,用户界面非常简洁,使得你 ...

  8. android程序移动到Linux,Android应用开发之Android 系统 -- 使用Xshell在Windows系统和Linux系统之间进行文件传输...

    本文将带你了解Android应用开发之Android 系统 -- 使用Xshell在Windows系统和Linux系统之间进行文件传输,希望本文对大家学Android有所帮助. 使用Xshell在Wi ...

  9. Socket网络程序设计(4) ———— 实现linux和windows的文件传输

    用TCP/TP进行网际互连(4) ---- 实现linux和windows的文件传输 1.实现要求 · 在循环面向连接的程序基础上,利用tcp完成linux和windows平台的文件传输 · 对服务器 ...

  10. 【PC工具】Windows 上编辑树莓派(linux EXT)分区文件工具——Ext2Fsd

    官网:http://www.ext2fsd.com/ 版本:0.69 功能:看我下边用一种巧妙的方式引入这个软件的功能 第一次使用树莓派,(好不容易)按照教程将镜像写入了SD卡,突然弹出(下图)要我格 ...

最新文章

  1. 谷歌重磅开源新技术:5行代码打造无限宽神经网络模型,帮助“打开ML黑匣子”...
  2. sql left join用法_一张图看懂 SQL 的各种 join 用法
  3. iOS 静态库代码混淆方案
  4. 结合反向传播算法使用python实现神经网络的ReLU、Sigmoid、Affine、Softmax-with-Loss层
  5. yeoman+grunt/gulp+bower构建angular项目
  6. 如何通过 Web 实现防御木马、病毒...... | 原力计划
  7. H5 27-优先级之important
  8. android开发ViewPager按比例显示图片(显示下一张图片的一部分)
  9. matlab幂指数函数图像,matlab画指数函数曲线
  10. 神经网络在线和离线的区别,神经网络网站
  11. iOS Programming - Disallow Alphabetic Characters
  12. EKL日志分析平台-kibana数据可视化
  13. WIn10 1909 Windows Hello 指纹:出现错误,请稍后再试一次
  14. win7计算机自动关机设置在哪里设置方法,win7自动关机怎么设置
  15. 在Linux和Windows上安装kafka(版本:2.12-2.8.0)
  16. rk3288 SDK概览
  17. ROS深度图转化为点云
  18. 地铁杂记 - 17寸苹果
  19. 关于神经网络训练的一些技巧NN Tricks
  20. 合宙Luat | 电源设计——模块应用必看的2个要点

热门文章

  1. 抢红包插件实现原理浅析
  2. php导出excel数据
  3. win10计算器rsh_酷到你认不出!新Win10计算器上手体验
  4. 使用正则表达式写网易通行证
  5. c语言函数名称大全,C语言函数大全
  6. 非线性系统的理论和方法,神经网络的非线性
  7. cad转shp 奥维_如何将地图数据及奥维对象导出到CAD
  8. win10安装cmder和WSL
  9. 基于PHP语言的汉语转拼音的类
  10. APP性能测试之GT 测试