让技术·支撑梦想

点击上方蓝字可以关注我们哦

首先把Ubuntu向开发板发送文件的流程做一下笔记,下一篇笔记就记录开发板如何接受文件....

上一篇笔记:Makefile文件的编写规则及实例

有很多小伙伴看不懂术语,所以这次小浩用口语方式表达这次笔记,可能表达能力欠佳,多多包涵。

1.说一下环境,虚拟机和开发板要在同一个局域网同一网段,而小浩这次用的是UDP协议来收发消息的,虽然说UDP不可靠,不稳定,在数据传递时,如果网络质量不好,就会很容易丢包,但UDP就是比TCP传输速度快,天下武功唯快不破.

2. 接下来,进入主题吧

a.创建一个UDP通信端点, 即socket();

b.准备好开发板的IP地址和端口号c. 然后把IPV4、端口号、IP地址放进sockaddr_in结构体,该结构体是系统封装的一个结构体

d.然后选择要发给开发板的文件

e.获取文件属性并发给开发板,则等待开发板回应

f.获得开发板允许后,把文件发给开发板

g.最后传输完毕,提示虚拟机发送成功

这个发送文件流程就是这么简单啦!!!

3.接下来我们看看代码,来看看我们实现的现场

/*公众号:小浩笔记备注:小浩除去头文件,减短篇幅,方便阅读*/

//创建套接字函数int Socket(int domain, int type, int protocol){    int sockfd = socket(domain, type, protocol);    if(sockfd == -1)    {        perror("创建UDP套接字失败");        exit(0);    }

    return sockfd;}

//绑定地址的函数int Bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen){    if(bind(sockfd, addr, addrlen) == -1)    {        perror("绑定地址失败");        exit(0);    }    return 0;}

//udp连接的函数int Connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen){    int ret = connect(sockfd, addr, addrlen);    if(ret != 0)    {        perror("连接失败");        exit(0);    }    return ret;}//读文件函数void readfile(char *content, const char *filename, int size){    int fd = open(filename, O_RDONLY);    if(fd == -1)    {        perror("文件无法打开");        exit(0);    }

    int total = 0;    while(total < size)    {        int n = read(fd, content+total, size);        if(n == -1)        {            perror("读取文件失败");            exit(0);        }

        total += n;    }

    close(fd);}

int main(int argc, char **argv){    if(argc != 3)    {        printf("参数错误!用法:\n");        exit(0);    }

    // 1,创建UDP通信端点    int sockfd = Socket(AF_INET, SOCK_DGRAM, 0);

    // 2,准备开发板的地址(IP+PORT)    struct sockaddr_in addr;    socklen_t len = sizeof(addr);    bzero(&addr, len);

    addr.sin_family = AF_INET; // 指定协议族,这里是IPv4地址    addr.sin_addr.s_addr = inet_addr(argv[1]); // IP地址    addr.sin_port = htons(atoi(argv[2])); // PORT端口号

    // 3,选择要发送给开发板的文件    char filename[50];    bzero(filename, 50);    gets (filename);

    // 4,获取文件属性信息并发送给开发板    struct stat info;    bzero(&info, sizeof(info));    stat(filename, &info);

    struct fileinfo finfo;    bzero(&finfo, sizeof(finfo));    strncpy(finfo.name, filename, 50);    finfo.size = info.st_size;

    printf("名字:%s\n大小:%d\n", finfo.name, finfo.size);    int n = sendto(sockfd, &finfo, sizeof(finfo), 0,                   (struct sockaddr *)&addr, len);    if(n > 0)        printf("发送文件属性信息成功,发了%d个字节\n", n);    else    {        perror("发送文件属性信息失败");        exit(0);    }

    // 5,等待开发板的确认    char response;    recvfrom(sockfd, &response, 1, 0, NULL, NULL);    if(response == 'n')        return 0;

    // 6,将文件内容放入content中    char *content = calloc(1, finfo.size);    readfile(content, finfo.name, finfo.size);

    // 7,开始给开发板发送文件的内容    int total = 0;    while(total < finfo.size)    {        int remain = finfo.size-total;        int m = remain>1024 ? 1024 : remain;

        // 每次最多发1k数据量        total += sendto(sockfd, content+total, m, 0,                        (struct sockaddr *)&addr, len);    }

    printf("发送完毕\n");    close(sockfd);

    return 0;}

记录点点滴滴的笔记欢迎关注,共同学习

小浩笔记

ubuntu 虚拟机 串口 socket_上篇 | 虚拟机Ubuntu向开发板AMR传送文件相关推荐

  1. 通过tftp在ubuntu和LS1B开发板之间传输文件

    1.配置虚拟机(Ubuntu)ip地址信息 ifconfig eth0 192.168.1.10 netmask 255.255.255.0  //配置Ubuntu IP地址 route add de ...

  2. ubuntu如何在开发板上挂载文件

    一.在ubuntu系统中安装nfs服务 1.安装nfs软件包 sudo apt-get install nfs-kernel-server sudo apt-get install nfs-commo ...

  3. Ubuntu通过tftp与嵌入式设备(开发板)进行文件互传

    服务端(Ubuntu端): 1.安装服务 //sudo apt-get install tftp-hpa tftpd-hpa xinetd(另一种) sudo apt install tftp-hpa ...

  4. 选择的串口 _ 不存在或开发板没有连接_PC 和开发板之间传输文件

    8.1 传输文件的多种方法 在嵌入式开发中,涉及交叉编译:在 PC 上编译,在开发板上运行.所以就涉及 PC 和开发板之间的文件 传输,方法有多种:网络传输.串口传输.USB 传输,当然,还有最笨的方 ...

  5. linux中使用串口(dnw)下载程序到jz2440开发板

    对于大多数使用韦东山jz2440开发板的用户来说,使用OpenJTAG或EasyOpenJTAG是非常方便的,并且视频教程中也是用这两种 来教学的,对于没有OpenJTAG. EasyOpenJTAG ...

  6. tftpd32、虚拟机、PC机、开发板之间的文件传输

    问题:如何在电脑虚拟机上的Linux C程序下载到开发板呢? 首先,虚拟机上安装Linux系统 Linux上的操作有: 编辑好Hello.c源程序 接着编译,因为最后是要在开发板执行程序,所以使用编译 ...

  7. c++创建虚拟串口_linux虚拟串口控制器驱动实现——适用于无开发板学习串口驱动...

    在上一章我们已经说明了uart驱动的开发流程,本章我们就不再介绍uart相关的接口实现,仅通过实现一个虚拟的串口控制器程序,用以说明虚拟串口的开发流程. 本次开发的虚拟串口提供的功能如下: 提供两个串 ...

  8. Ubuntu上安装wine QQ国际版后如何定位好友传送文件的保存位置?

    背景描述: 1)接收成功好友发送的文件之后,在好友消息框中"点击"打开所在文件夹. 2)如下图所示,在wine Explorer中显示出了所接收文件,但是无法执行打开/复制等任何操 ...

  9. ubuntu下的qt程序移植至ARM开发板

    一.第一步新建一个helloworld  QT工程. 二.使用qmake工具生成Makefile文件 在工程源码文件夹运行qmake   "#/opt/qt-4.7.1/bin/qmake& ...

最新文章

  1. Tungsten Fabric SDN — 网络架构
  2. linux下性能监控工具
  3. 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )
  4. python写入txt文件正常,但是写入csv文件中文乱码问题
  5. HDU1010 Tempter of the Bone DFS+剪枝
  6. verilog扰码器设计及仿真
  7. 如何在django项目中使用django-ckeditor
  8. 【NOIP2013】【Luogu1980】计数问题
  9. linux进程通信system v,【linux高级程序设计】(第十一章)System V进程间通信 4
  10. 重返商用计算市场,紫光计算机要做数字化转型生意
  11. 仿网易云音乐html代码,HTML作业-仿网易云音乐项目
  12. 开放源代码现象的经济基础
  13. 慢慢欣赏linux 串口驱动架构
  14. 将已经汉化了的Protel 99 SE整回英文原版
  15. html 打印 使用模板,HTML针式打印机打印模板
  16. 高斯过程回归预测 C++代码实现
  17. php采集 今日头条链接,火车头按作者采集今日头条全部文章的方法
  18. php插入数据含有特殊符号的处理方法
  19. ZCMU--5066: 黑暗长廊
  20. 眼袋、眼袋、眼袋!眼袋一直有~~~~ 肿么办啊

热门文章

  1. excel导入数据到sqlserver
  2. 从零开始:iOS(三)
  3. Web在线操作Office之Word
  4. 【操作系统复习】操作系统的运行机制与体系结构
  5. android 下载器布局,Android Studio下载约束布局失败
  6. $.ajax 加了headers报错_Springboot解决Ajax跨域的三种方式
  7. 华为服务器更换主板后怎么进系统,服务器更换主板
  8. 去掉边框_安卓也有堪比 VOUN 的加边框应用了,素材丰富到没朋友
  9. python工具箱查询手册书籍京东_十二. 项目实战:爬取京东商城中的书籍信息
  10. 单词短语搭配用法网站