qt5中如何开发ftp客户端

lsq8178 2015-12-03 06:19:08
qt5中没有QFtp类,因为某些原因用的QNetworkAccessManager代替了。
以下是我的代码

QFile txt1(m_upgrade_file_name);
txt1.open(QIODevice::ReadOnly);

QByteArray by_txt = txt1.readAll();
qDebug() << ty_txt << endl;
txt1.close();

QUrl url;
url.setScheme("ftp");
url.setHost(ui->lineEdit_IP_Input->text());//地址
url.setPath(name);//文件名
url.setPort(ui->lineEdit_Ftp_Port_Input->text().toInt());//端口
url.setPassword(ui->lineEdit_Pwd_Input->text()); //设置ftp用户密码
url.setUserName(ui->lineEdit_User_Input->text());//设置ftp用户名
QNetworkRequest request;//该QNetworkReply类包含的数据和标题,对QNetworkAccessManager发送请求

qDebug() << url.toString() << endl;
request.setUrl(url); //这只request的请求
QNetworkAccessManager *manager = new QNetworkAccessManager;//QNetworkAccessManager 允许发送网络请求和接收回复
QNetworkReply *reply = manager->put(request, by_txt);

connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));


某些ftp服务器它可以上传文件,但是有些服务器就连不上了,而我用cmd中的ftp可以连上,实在是不知道什么原因,帮帮忙啊,跪求!!!
...全文
3432 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_38094828 2017-03-28
  • 打赏
  • 举报
回复
能分享下源码吗?我现在也要用QT5写ftp上传。谢谢
我是传奇zhg 2017-02-22
  • 打赏
  • 举报
回复
为何我用“”test/text.txt"也无法创建文件夹啊
我不懂电脑 2015-12-04
  • 打赏
  • 举报
回复
类似下面用qt调用命令行ftp命令 QProcess p(0); p.start("cmd", QStringList()<<"/c"<<"dir"); p.waitForStarted(); p.waitForFinished(); qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());
lsq8178 2015-12-04
  • 打赏
  • 举报
回复
怎么没有人回帖呢,我用抓包工具看了一下 程序会发一条Request:ALLO 123(字节数)的命令,服务器返回命令没有执行就结束了。而用cmd执行时,客户端不会发那一条命令直接就发Request:STOR (文件),就成功了,该怎么改呢?
lsq8178 2015-12-04
  • 打赏
  • 举报
回复
引用 2 楼 songhtao 的回复:
类似下面用qt调用命令行ftp命令 QProcess p(0); p.start("cmd", QStringList()<<"/c"<<"dir"); p.waitForStarted(); p.waitForFinished(); qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());
这个我试了一下,太慢了,没有用这种方法。 我找到代码中的原因了,问题在这句: url.setPath(name);//文件名 要是想在根目录下创建文件,就直接写文件名。比如text.txt,那就写成url.setPath("text.txt"); 如果想创建文件夹,然后写文件,比如test/text.txt;就写成url.setPath("test/text.txt");不要写成url.setPath("/test/text.txt"); 我才测试的时候,用的服务器是windows下面的写成url.setPath("/text.txt");可以运行,但是linux的服务器下面这句是不行的。 但是去掉“/"后,windows和Linux下面都是可行的。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧