当前位置: 首页 > news >正文

网站备案服务商百度信息流推广平台

网站备案服务商,百度信息流推广平台,化妆品品牌网站如何做,哪个旅游网站做的最好目录 1.TCP Socket1.核心API概览2.回显服务器3.回显客户端 2.HTTP Client3.其他模块 1.TCP Socket 1.核心API概览 核⼼类是两个:QTcpServer和QTcpSocketQTcpServer用于监听端口,和获取客户端连接 listen(const QHostAddress&, quint16 port)&#…

目录

  • 1.TCP Socket
    • 1.核心API概览
    • 2.回显服务器
    • 3.回显客户端
  • 2.HTTP Client
  • 3.其他模块


1.TCP Socket

1.核心API概览

  • 核⼼类是两个:QTcpServerQTcpSocket
  • QTcpServer用于监听端口,和获取客户端连接
    • listen(const QHostAddress&, quint16 port):绑定指定的地址和端⼝号,并开始监听
      • 成员方法
      • 对标原⽣API:bind() 和listen()
    • nextPendingConnection():从系统中获取到⼀个已经建⽴好的tcp连接
      • 返回⼀个QTcpSocket,表⽰这个客⼾端的连接
        • 通过这个socket对象完成和客⼾端之间的通信
      • 成员方法
      • 对标原⽣API:accept()
    • newConnection():有新的客⼾端建⽴连接好之后触发
      • 信号
      • 类似于IO多路复用的通知机制
  • QTcpSocket⽤于客⼾端和服务器之间的数据交互
    • readAll():读取当前接收缓冲区中的所有数据,返回QByteArray对象
      • 成员方法
      • 对标原生API:read()
    • write(const QByteArray &):把数据写⼊socket中
      • 成员方法
      • 对标原生API:write()
    • deleteLater():暂时把socket对象标记为⽆效,Qt会在下个事件循环中析构释放该对象
      • 成员方法
      • 类似于"半⾃动化的垃圾回收"
    • readyRead():有数据到达并准备就绪时触发
      • 信号
      • 类似于IO多路复⽤中的通知机制
    • disconnected():连接断开时触发
      • 信号
      • 类似于IO多路复⽤中的通知机制

2.回显服务器

// 构造函数中
{server = new QTcpServer(this);// 通过信号槽, 指定如何处理连接.connect(server, &QTcpServer::newConnection, this, &Widget::ProcessConnection);// 绑定并监听端口号if (!ret = server->listen(QHostAddress::Any, 2333)) {QMessageBox::critical(this, "服务器启动失败!", server->errorString());exit(1);}
}void Widget::ProcessConnection()
{// 通过 server 拿到一个 socket 对象, 通过这个对象来和客户端进行通信QTcpSocket* clientSocket = tcpServer->nextPendingConnection();QString log = "[" + clientSocket->peerAddress().toString() + ":" + QString::number(clientSocket->peerPort()) + "] 客户端上线!";ui->listWidget->addItem(log);// 通过信号槽, 来处理客户端发来请求的情况connect(clientSocket, &QTcpSocket::readyRead, this, [=]() {// a) 读取出请求数据,此处 readAll 返回的是 QByteArray, 通过赋值转成 QStringQString request = clientSocket->readAll();// b) 根据请求处理响应const QString& response = Process(request);// c) 把响应写回到客户端clientSocket->write(response.toUtf8());// d) 把上述信息记录到日志中.QString log = "[" + clientSocket->peerAddress().toString() + ":" + QString::number(clientSocket->peerPort()) + "] "+ " req: " + request + ", resp: " + response;ui->listWidget->addItem(log);});// 通过信号槽, 来处理客户端断开连接的情况.connect(clientSocket, &QTcpSocket::disconnected, this, [=]() {// a) 把断开连接的信息通过日志显示出来.QString log = "[" + clientSocket->peerAddress().toString() + ":" + QString::number(clientSocket->peerPort()) + "] 客户端下线!";ui->listWidget->addItem(log);// b) 手动释放 clientSocket. 直接使用 delete 是下策, 使用 deleteLater 更加合适clientSocket->deleteLater();});
}QString Widget::Process(const QString request)
{return request;
}

3.回显客户端

// 构造函数中
{socket = new QTcpSocket(this);// 服务器建立连接,此处是非阻塞的IO通信socket->connectToHost("127.0.0.1", 2333);// 连接信号槽, 处理响应connect(socket, &QTcpSocket::readyRead, this, [=]() {// a) 读取出响应内容QString response = socket->readAll();// b) 把响应内容显示到界面上.ui->listWidget->addItem("服务器说: " + response);});// 等待连接建立的结果. 确认是否连接成功.if (!socket->waitForConnected()) {QMessageBox::critical(this, "连接服务器出错", socket->errorString());exit(1);}
}void Widget::on_pushButton_clicked()
{const QString& text = ui->lineEdit->text();socket->write(text.toUtf8());ui->listWidget->addItem("客户端说: " + text);ui->lineEdit->setText("");
}

2.HTTP Client

  • Qt只提供了Http客户端,并没有提供Http服务端的库
  • 关键类主要是三个:QNetworkAccessManager , QNetworkRequest , QNetworkReply
  • QNetworkAccessManager提供了HTTP的核⼼操作
    • get(const QNetworkRequest&):发起⼀个HTTP GET请求,返回QNetworkReply对象
      • 本身不是阻塞函数,只负责发出去请求,不负责等请求回来
      • 收是QNetworkReply负责的,会收到finished信号
    • post(const QNetworkRequest&, const QByteArray&):发起⼀个HTTP POST请求,返回QNetworkReply对象
  • QNetworkRequest表⽰⼀个HTTP请求(不含body),如果需要发送⼀个带有body的请求(⽐如post),会在QNetworkAccessManagerpost()中通过单独的参数来传⼊body
    • QNetworkRequest(const QUrl&):通过URL构造⼀个HTTP请求
    • setHeader(QNetworkRequest::KnownHeaders header, const QVariant& value):设置请求头
      • QNetworkRequest::KnownHeaders是⼀个枚举类型,常⽤取值
        • ContentTypeHeader:描述body的类型
        • ContentLengthHeader:描述body的⻓度
        • LocationHeader:⽤于重定向报⽂中指定重定向地址
        • CookieHeader:设置cookie
        • UserAgentHeader:设置User-Agent
  • QNetworkReply表⽰⼀个HTTP响应,这个类同时也是QIODevice的⼦类
    • error():获取出错状态
    • errorString():获取出错原因的⽂本
    • readAll():读取响应body
    • header(QNetworkRequest::KnownHeaders header):读取响应指定header的值
    • finished():为一个信号,在客⼾端收到完整的响应数据之后触发
  • 示例
    // 构造函数中
    {manager = new QNetworkAccessManager(this);
    }void Widget::on_pushButton_clicked()
    {// 1. 获取到输入框中的 urlQUrl url(ui->lineEdit->text());// 2. 构造一个 HTTP 请求对象QNetworkRequest request(url);// 3. 发送请求QNetworkReply* response = manager->get(request);// 4. 通过信号槽, 来处理响应connect(response, &QNetworkReply::finished, this, [=]() {if (response->error() == QNetworkReply::NoError) {QString html = response->readAll();ui->plainTextEdit->setPlainText(html);} else {ui->plainTextEdit->setPlainText(response->errorString());}// 需要对 response 进行手动释放.response->deleteLater();});
    }
    

3.其他模块

  • Qt中还提供了FTP,DNS,SSL等⽹络相关的组件⼯具,有需要可以具体学习,查阅官方文档
http://www.tj-hxxt.cn/news/127324.html

相关文章:

  • 什么是二级域名网站郑州关键词seo
  • 建筑公司网站平台seo网络推广外包公司
  • 上海外贸网站建设360搜索推广官网
  • 外贸建站用什么服务器网址seo查询
  • 国外一些建筑公司网站青岛百度竞价
  • 深圳网站建设珠江广场广州今天新闻
  • 青岛本地招聘网站关键词点击优化工具
  • 榆林做网站需要注意的几点今日国际新闻头条
  • 北京网站建设的报价快速学电脑培训班
  • php网站整合dz论坛广西百度seo
  • 来自网站的临时会话安徽网络建站
  • 鱼骨建站公司注册网站平台要多少钱
  • 怎么改版一个网站seo高级
  • b站倒过来的网站谁做的合肥搜索引擎推广
  • 山东济南网站开发项目营销策划方案
  • 有没有做鸭子的网站惠州seo优化服务
  • 宿州商务网站建设全自动引流推广软件免费
  • 微信微网站是什么网站推广该怎么做
  • 科技信息网站建设的背景今日百度小说排行榜
  • seo 刷网站url学生个人网页制作
  • lol解说网站源码优化大师人工服务电话
  • 如何做网站宣传开发一个网站需要多少钱
  • 招聘网站建设流程图分析网站推广和优化的原因
  • 高大上的企业网站产品营销软文
  • 做外贸需关注的网站中国2022年重大新闻
  • 费县做网站洗发水营销推广软文800字
  • 成都六度网站建设有哪些平台可以发布推广信息
  • 凡科可以做视频网站吗企业邮箱登录
  • 用虚拟机做网站服务器吗做网站建设公司
  • 上海营销型网站设计网站关键词排名优化电话