qt_网络通信

QHostInfo

主要是自身名称,ip信息

函数 作用
QList addresses() const 得到地址
QString errorString() const 错误原因
QString hostName() const 主机名称
QString localDomainName()
QString localHostName()
int lookupHost(const QString &name, QObject *receiver, const char *member) 还回
NetWorkTest::NetWorkTest(QWidget *parent)
    : QWidget(parent)
{

    qDebug()<<QHostInfo::localHostName();
    QHostInfo local_info=QHostInfo::fromName("www.baidu.com");
    auto lookup=[&local_info]{
        qDebug()<<local_info.hostName();
        foreach (QHostAddress address, local_info.addresses()) {
            if(address.protocol()==QAbstractSocket::IPv4Protocol){
                qDebug()<<"IPv4 adress is:"<<address.toString();
            }
            if(address.protocol()==QAbstractSocket::IPv6Protocol){
                qDebug()<<"IPv6 address is:"<<address.toString();
            }
        }
    };
    lookup();

    exit(0);

}
/*
"ubuntu"
"www.baidu.com"
IPv4 adress is: "14.215.177.38"
IPv4 adress is: "14.215.177.39"

*/

QHostAddress

IP地址

函数 作用
QAbstractSocket::NetworkLayerProtocol protocol() const 返回协议
void setAddress(quint32 ) 设置IP地址
quint32 toIPv4Address() const 得到地址
quint32 toIPv4Address(bool *ok) const
QString toString() const
QTextStream cout(stdout);
NetWorkTest::NetWorkTest(QWidget *parent)
    : QWidget(parent)
{

    auto getIp=[]{
        foreach (QHostAddress address, QNetworkInterface::allAddresses()) {
            cout<<endl;
            if(address.protocol()==QAbstractSocket::IPv4Protocol){
                qDebug()<<address.toString();
            }
            if(address.protocol()==QAbstractSocket::IPv6Protocol){
                Q_IPV6ADDR IPv6=address.toIPv6Address();
                for(int i=0;i<16;i+=2)
                cout<<hex<<IPv6[i]<<IPv6[i+1]<<":";
            }
            cout<<endl;
        }
    };
    getIp();

    exit(0);

}
/*
"127.0.0.1"
00:00:00:00:00:00:00:01:
"192.168.252.128"
fe80:00:00:00:1d73:3a4:8c23:91d4:
*/
QTextStream cout(stdout);
NetWorkTest::NetWorkTest(QWidget *parent)
    : QWidget(parent)
{

    auto getIp=[]{
        QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
        foreach (QNetworkInterface netInterface, list) {
            QList<QNetworkAddressEntry> entryList = netInterface.addressEntries();
            foreach(QNetworkAddressEntry entry, entryList) {  // 遍历每一个IP地址
                qDebug() << "********************";
                qDebug() << "IP Address:" << entry.ip().toString();  // IP地址
                qDebug() << "Netmask:" << entry.netmask().toString();  // 子网掩码
                qDebug() << "Broadcast:" << entry.broadcast().toString();  // 广播地址
                qDebug() << "Prefix Length:" << entry.prefixLength();  // 前缀长度
            }
        }
    };
    getIp();

    exit(0);

}
/*
********************
IP Address: "127.0.0.1"
Netmask: "255.0.0.0"
Broadcast: "127.255.255.255"
Prefix Length: 8
********************
IP Address: "::1"
Netmask: "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
Broadcast: ""
Prefix Length: 128
********************
IP Address: "192.168.252.128"
Netmask: "255.255.255.0"
Broadcast: "192.168.252.255"
Prefix Length: 24
********************
IP Address: "fe80::1d73:3a4:8c23:91d4%ens33"
Netmask: "ffff:ffff:ffff:ffff::"
Broadcast: ""
Prefix Length: 64

*/

QUrlQuery

 NetWorkTest::NetWorkTest(QWidget *parent)
    : QWidget(parent)
{
    // 基本 URL
    QString baseUrl = "http://www.zhihu.com/search";
    QUrl url(baseUrl);

    // key-value 对
    QUrlQuery query;
    query.addQueryItem("type", "content");
    query.addQueryItem("q", "Qt");

    url.setQuery(query);

    qDebug() << url;
}
/*
 * QUrl("http://www.zhihu.com/search?type=content&q=Qt")
*/
//bool exist = query.hasQueryItem("q");
// true

QHttp

**QHttpPart **

函数 作用
void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
void setBody(const QByteArray &body)
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
textPart.setBody("here goes the body");
QHttpPart imagePart;
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"image\""));
imagePart.setRawHeader("Content-ID", "[email protected]"); // add any headers you like via setRawHeader()
QFile *file = new QFile("image.jpg");
file->open(QIODevice::ReadOnly);
imagePart.setBodyDevice(file);
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);

QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
textPart.setBody("my text");

QHttpPart imagePart;
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"image\""));
QFile *file = new QFile("image.jpg");
file->open(QIODevice::ReadOnly);
imagePart.setBodyDevice(file);
file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart

multiPart->append(textPart);
multiPart->append(imagePart);

QUrl url("http://my.server.tld");
QNetworkRequest request(url);

QNetworkAccessManager manager;
QNetworkReply *reply = manager.post(request, multiPart);
multiPart->setParent(reply); // delete the multiPart with the reply
// here connect signals etc.
QTextStream cout(stdout);
NetWorkTest::NetWorkTest(QWidget *parent)
    : QWidget(parent)
{
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    // URL
    QString baseUrl = "http://www.baidu.com";

    // 构造请求
    QNetworkRequest request;
    request.setUrl(QUrl(baseUrl));

    // 发送请求
    QNetworkReply *pReplay = manager->get(request);

    // 开启一个局部的事件循环,等待响应结束,退出
    QEventLoop eventLoop;
    QObject::connect(manager, &QNetworkAccessManager::finished, &eventLoop, &QEventLoop::quit);
    eventLoop.exec();

    // 获取响应信息
    QByteArray bytes = pReplay->readAll();

    //写入文件
    QFile file("/home/zz/Desktop/my.html");
    QTextStream outfile(&file);
    if(!file.open(QIODevice::WriteOnly))return;
    outfile<<bytes;
    file.close();
}

猜你喜欢

转载自blog.csdn.net/qq_33564134/article/details/85019301
今日推荐