Qt网络编程

Qt网络编程

sf2gis@163.com

2015年5月2日

 

1  目标:在网络上不同的计算机之间进行交互。

原理:构造不同的传输协议,在不同的主机之间进行按照协议标准进行请求和回复。

方法:HTTP,FTP,TCP,UDP

使用QtNetwork框架的相关类操作。

1.1 Qt  操作

协议管理:使用QUrl进行Url构造,包含对协议、用户名、密码等设置。

请求:QNetworkRequest。

回复:QNetworkReply。

操作管理:QNetworkAccessManager。负责进行HTTP操作及状态。

进度:QNetworkReply发送downloadProgress()信号。

1.2 示例

1.2.1 Http请求页面

voidMainWindow::http()

{

    QNetworkAccessManager *pManager = newQNetworkAccessManager(this);

   connect(pManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(handleReply(QNetworkReply*)));

    QNetworkReply *reply =pManager->get(QNetworkRequest(QUrl("http://www.gfsoso.net/")));

   connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(handleProgress(qint64,qint64)));

}

 

voidMainWindow::handleReply(QNetworkReply *reply)

{

    QString strReply(reply->readAll());

    qDebug()<<strReply;

    ui->textBrowser->setText(strReply);

    reply->deleteLater();

}

 

voidMainWindow::handleProgress(qint64 readBytes,qint64 totalBytes)

{

   ui->progressBar->setMaximum(totalBytes);

    ui->progressBar->setValue(readBytes);

}

1.2.2 FTP下载文件

voidMainWindow::handleReply(QNetworkReply *reply)

{

    QByteArray ba = reply->readAll();

    QString strReply(ba);

    qDebug()<<strReply;

    ui->textBrowser->setText(strReply);

    QFile file("test.tar.gz");

    file.open(QFile::WriteOnly);

    file.write(ba);

    file.close();

    reply->deleteLater();

}

 

voidMainWindow::handleProgress(qint64 readBytes,qint64 totalBytes)

{

   ui->progressBar->setMaximum(totalBytes);

    ui->progressBar->setValue(readBytes);

}

 

voidMainWindow::ftp()

{

    QNetworkAccessManager *pManager = newQNetworkAccessManager(this);

   connect(pManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(handleReply(QNetworkReply*)));

    QNetworkReply *reply =pManager->get(QNetworkRequest(QUrl("ftp://ftp.pku.edu.cn/open/db/MySQL/mysql-connector-java-5.1.21.tar.gz")));

   connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(handleProgress(qint64,qint64)));

}

 

2 Http :HypeText Tranfer Protoco,超文本传输协议

2.1 目标:发送和接收HTML。

2.2 方法:

提供多种操作方式,如get(请求URL),Post(请求处理数据),PUT(上传数据),DELETE(删除),CONNECT(连接到TCP/IP),OPTIONS(返回所有支持的方法),HEAD(仅返回头)。其中CURD对应POST,PUT,GET,DELETE。

GET与POST的区别:get使用url的一部分传递参数,可见,长度有限(2048),只能传递ascii。post使用单独传递数据,不可见,长度不了,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值