qt5集成libcurl实现tftp和ftp的方法一:搭建环境(五篇文章)
最近使用QT5做一个软件,要求实现tftp和ftp文件传输,使用QT5开发好UI界面等功能,突然发现QT5不直接提供tftp和ftp支持,无奈之下只好找第三方库来间接实现,根据网友的介绍,libcurl是一个比较小巧好用的网络扩展库,但问题来了,该怎么用呢?折腾了几天,终于在周五晚上别人都下班回家了,我还不甘心的情况下加班找到了解决的方法。现在整理出来,分享给大家,也给自己做个笔记。
首先介绍如何搭建使用环境,这个非常重要,下一篇介绍如何实现文件传输。这涉及到qt5、minGW和libcurl编译三方面的协同。
1.安装QT5的注意事项
安装qt5说起来非常简单,但是经常出错,有时候是装上之后运行QT creator的时候出现错误。下面介绍一个我测试过没有问题的安装方法:
首先是qt5建议安装qt5.5.0等公认的稳定性比较好的版本,不要随便找个版本就安装。推荐一个下载地址http://mirror.bit.edu.cn/qtproject/archive/qt/5.5/5.5.0/
打开这个地址,看一看到里面有很多版本,三大系统win、Linux和mac都有,win环境又分了msvc、mingw和x86与x64等多种版本,这个必须要注意。qt本身不能编译程序的,要借用VisualStudio或者gcc来完成编译。前者对应的版本就是名称中带有msvc的版本,而后者就是能够在win下运行的GCC开发工具链。如果你电脑里装了可用的VisualStudio环境,可以使用msvc版的,但是为了减少不必要的麻烦,我强烈建议只选择MinGW版本的。我选择的版本是qt-opensource-windows-x86-mingw492-5.5.0.exe ,注意mingw版本的只有32位的。
注意在有些版本中,比如在qt5.0的安装文件中有名称中带opengl的,这种版本是在qt中集成了OpenGL,安装这种版本需要安装显卡驱动之类的,特别容易出错,强烈建议不安装。
下载后直接安装即可,还有一个需要注意的是,在安装时有下面这个个选项,在Tools下有个MinGW,强烈建议安装,后面有用。
2.编译libcurl
在编译libcurl时,可以使用其lib下的makefile文件直接编译,但是必须先配置好MinGW,这里必须保证编译器与QT5使用的一致。我首先在网上下载了一个MinGW,但是编译成功的无法使用,报告“file not recognized: File format not recognized”错误。那么最好的编译器是什么呢?就是上面说的QT安装时Tools下的MinGW。
先将其添加到环境变量中,然后调用Make编译即可。
配置环境变量的参数是,如果你不知道,请百度一下,方法和配置java等都一样的:
新建 MINGW_HOME 值为C:\Qt\Qt5.5.1\Tools\mingw492_32 (你的安装路径)
path变量添加“;%MINGW_HOME%\bin;”
假如你的文件在D:\workspace\curl-7.32.0下,那么cd过去,然后使用下面的命令编译即可:
mingw32-make -f Makefile.m32
然后等待编译完成。 编译完成之后,我们可以在curl的lib目录下看到几个文件:libcurl.a、libcurl.dll和libcurldll.a三个文件,这就是我们需要的链接库了。
3.使用
LIBS+="./../lib/libcurl.dll"
4.测试
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <errno.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/stat.h>
- #include<QDebug>
- #include"./include/curl/curl.h"
- size_t process_data(void *buffer, size_t size, size_t nmemb, void *user_p) {
- FILE *fp = (FILE *)user_p;
- size_t return_size = fwrite(buffer, size, nmemb, fp);
- qDebug()<< (char *)buffer << endl;
- return return_size;
- }
- int curlTest2()
- {
- // 初始化libcurl
- CURLcode return_code;
- return_code = curl_global_init(CURL_GLOBAL_ALL);
- if (CURLE_OK != return_code) {
- qDebug() << "init libcurl failed." << endl;
- return -1;
- }
- // 获取easy handle
- CURL *easy_handle = curl_easy_init();
- if (NULL == easy_handle)
- {
- qDebug() << "get a easy handle failed." << endl;
- curl_global_cleanup();
- return -1;
- }
- FILE *fp = fopen("d:/data.html", "ab+");
- // 设置easy handle属性
- curl_easy_setopt(easy_handle, CURLOPT_URL, "http://c.biancheng.net/cpp/html/314.html");
- curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, &process_data);
- curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, fp);
- // 执行数据请求
- curl_easy_perform(easy_handle);
- // 释放资源
- fclose(fp);
- curl_easy_cleanup(easy_handle);
- curl_global_cleanup();
- }
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- int a=curlTest2();
- ui->setupUi(this);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
编译运行,就可以看到我们这篇博客被qt5自动下载到本地了,在控制台输出下载的html文件,并且在D盘下生成一个data.html的文件。不过由于设置不完整,中文都是乱码,这个先不管了,以后再介绍怎么操作。
http://blog.csdn.net/xueyushenzhou/article/details/51702672
qt5集成libcurl实现tftp和ftp的方法一:搭建环境(五篇文章)的更多相关文章
- 【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.1 搭建环境
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- 解决:百度编辑器UEditor,怎么将图片保存到图片服务器,或者上传到ftp服务器的问题(如果你正在用UE,这篇文章值得你看下)
在使用百度编辑器ueditor的时候,怎么将图片保存到另一个服务器,或者上传到ftp服务器?这个问题,估计很多使用UE的人会遇到.而且我百度过,没有找到这个问题的解决方案.那么:本篇文章就很适合你了. ...
- Kali学习笔记34:配置TFTP和FTP服务
配置TFTP: 默认情况下windowsXP和2003是开启TFTP服务的 其他windows到控制面板设置好就行 kali系统也是安装了TFTP服务的:atftpd 下面是一些配置并放入一个文件 w ...
- TFTP 与 FTP的区别
FTP(File Transfer Protocol,文件传输协议)协议在TCP/IP协议族中属于应用层协议,用于在远端服务器和本地客户端之间传输文件,使用TCP端口20和21进行传输.端口20用于传 ...
- rabbitMQ第五篇:Spring集成RabbitMQ
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...
- Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍
本文主要内容: 1.FTP服务端部署---- 基于Android中SwiFTP开源软件介绍: 2.FTP客户端部署 --- 基于ftp4j开源jar包的客户端开发 : 3.使用步骤 --- 如何测试我 ...
- Python学习笔记【第十五篇】:Python网络编程三ftp案例练习--断点续传
开发一个支持多用户在线的FTP程序-------------------主要是学习思路 实现功能点 1:用户登陆验证(用户名.密码) 2:实现多用户登陆 3:实现简单的cmd命令操作 4:文件的上传( ...
- linux中ftp的安装过程记录[运维篇]
安装FTP的全过程记录,对于相同情况希望有所帮助.[centOS] 1.查询本机是否安装vsftpd: rpm -qa |grep vsftpd : 2.安装ftp服务 yum install vsf ...
- Ftp服务端安装-Linux环境
目的 为什么要搭建FTP服务器,进入maven仓库下载Jar包时点击相应的链接进去会看到目录结构,这个就是ftp站点.可以随意的下载. 环境 Linux系统为CentOS6.5 安装步骤 查询是否已安 ...
随机推荐
- Python核心编程读笔 7: 条件和循环
第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...
- JAVA日期字符串转化,日期加减
SimpleDateFormat函数语法: G 年代标志符 y 年 M 月 d 日 h 时 在上午或下午 (1~12) H 时 在一天中 (0~23) m 分 s 秒 S 毫秒 E ...
- Tomcat教程
随着java的流行,其在web上的应用也越来越广,tomcat作为一个开源的servlet容器,应用前景越来越广,本文将向你讲述tomcat的一些知识. 一:简介 tomcat是jakar ...
- Nodejs学习笔记——Assert(断言)
Assert - a:actual e:expected m:message o:operator v:value b:block assert.fail(a, e, m, o) assert(v, ...
- response妙用
1.弹框提示信息 response.getWriter().print("<script>alert('文件不存在或已删除!');</script>"); ...
- Scala单例对象、伴生对象实战详解
1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...
- 关于scp 不需要密码
运行 ssh-keygen -t rsa 会在用户目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub // cat id_rsa.pub >~/.ssh/autho ...
- 16.java.lang.InterruptedException
java.lang.InterruptedException 被中止异常 当某个线程处于长时间的等待.休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常 ...
- PHP之MVC微型框架简单搭建
好长时间没有写博客了,这段时间过得紧张的不行,以致于都没有抽出时间来好好的总结一下自己这段时间的生活和学习. 其实今天不想写什么技术博客,就想简单总结一下这段时间的生活.10月8号从家里回来以后决定自 ...
- SD和SDHC和SDXC卡的区别是什么
SD卡,SDHC卡,SDXC卡区别在规格不一样,SD卡最大支持2GB容量,SDHC 最大支持32GB容量,SDXC 最大支持2TB(2048GB)容量,支持SDXC卡的数码设备是兼容支持SD卡与SDH ...