ubuntu 虚拟机 串口 socket_上篇 | 虚拟机Ubuntu向开发板AMR传送文件
让技术·支撑梦想
点击上方蓝字可以关注我们哦
首先把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传送文件相关推荐
- 通过tftp在ubuntu和LS1B开发板之间传输文件
1.配置虚拟机(Ubuntu)ip地址信息 ifconfig eth0 192.168.1.10 netmask 255.255.255.0 //配置Ubuntu IP地址 route add de ...
- ubuntu如何在开发板上挂载文件
一.在ubuntu系统中安装nfs服务 1.安装nfs软件包 sudo apt-get install nfs-kernel-server sudo apt-get install nfs-commo ...
- Ubuntu通过tftp与嵌入式设备(开发板)进行文件互传
服务端(Ubuntu端): 1.安装服务 //sudo apt-get install tftp-hpa tftpd-hpa xinetd(另一种) sudo apt install tftp-hpa ...
- 选择的串口 _ 不存在或开发板没有连接_PC 和开发板之间传输文件
8.1 传输文件的多种方法 在嵌入式开发中,涉及交叉编译:在 PC 上编译,在开发板上运行.所以就涉及 PC 和开发板之间的文件 传输,方法有多种:网络传输.串口传输.USB 传输,当然,还有最笨的方 ...
- linux中使用串口(dnw)下载程序到jz2440开发板
对于大多数使用韦东山jz2440开发板的用户来说,使用OpenJTAG或EasyOpenJTAG是非常方便的,并且视频教程中也是用这两种 来教学的,对于没有OpenJTAG. EasyOpenJTAG ...
- tftpd32、虚拟机、PC机、开发板之间的文件传输
问题:如何在电脑虚拟机上的Linux C程序下载到开发板呢? 首先,虚拟机上安装Linux系统 Linux上的操作有: 编辑好Hello.c源程序 接着编译,因为最后是要在开发板执行程序,所以使用编译 ...
- c++创建虚拟串口_linux虚拟串口控制器驱动实现——适用于无开发板学习串口驱动...
在上一章我们已经说明了uart驱动的开发流程,本章我们就不再介绍uart相关的接口实现,仅通过实现一个虚拟的串口控制器程序,用以说明虚拟串口的开发流程. 本次开发的虚拟串口提供的功能如下: 提供两个串 ...
- Ubuntu上安装wine QQ国际版后如何定位好友传送文件的保存位置?
背景描述: 1)接收成功好友发送的文件之后,在好友消息框中"点击"打开所在文件夹. 2)如下图所示,在wine Explorer中显示出了所接收文件,但是无法执行打开/复制等任何操 ...
- ubuntu下的qt程序移植至ARM开发板
一.第一步新建一个helloworld QT工程. 二.使用qmake工具生成Makefile文件 在工程源码文件夹运行qmake "#/opt/qt-4.7.1/bin/qmake& ...
最新文章
- Tungsten Fabric SDN — 网络架构
- linux下性能监控工具
- 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )
- python写入txt文件正常,但是写入csv文件中文乱码问题
- HDU1010 Tempter of the Bone DFS+剪枝
- verilog扰码器设计及仿真
- 如何在django项目中使用django-ckeditor
- 【NOIP2013】【Luogu1980】计数问题
- linux进程通信system v,【linux高级程序设计】(第十一章)System V进程间通信 4
- 重返商用计算市场,紫光计算机要做数字化转型生意
- 仿网易云音乐html代码,HTML作业-仿网易云音乐项目
- 开放源代码现象的经济基础
- 慢慢欣赏linux 串口驱动架构
- 将已经汉化了的Protel 99 SE整回英文原版
- html 打印 使用模板,HTML针式打印机打印模板
- 高斯过程回归预测 C++代码实现
- php采集 今日头条链接,火车头按作者采集今日头条全部文章的方法
- php插入数据含有特殊符号的处理方法
- ZCMU--5066: 黑暗长廊
- 眼袋、眼袋、眼袋!眼袋一直有~~~~ 肿么办啊
热门文章
- excel导入数据到sqlserver
- 从零开始:iOS(三)
- Web在线操作Office之Word
- 【操作系统复习】操作系统的运行机制与体系结构
- android 下载器布局,Android Studio下载约束布局失败
- $.ajax 加了headers报错_Springboot解决Ajax跨域的三种方式
- 华为服务器更换主板后怎么进系统,服务器更换主板
- 去掉边框_安卓也有堪比 VOUN 的加边框应用了,素材丰富到没朋友
- python工具箱查询手册书籍京东_十二. 项目实战:爬取京东商城中的书籍信息
- 单词短语搭配用法网站