IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Qt 中的网络编程(QTcpSocket Class 客户端类) -> 正文阅读

[网络协议]Qt 中的网络编程(QTcpSocket Class 客户端类)

?回顾c语言中的网络tcp编程:

Header:#include <QTcpSocket> 头文件
qmake:QT += network? ? ?//模块
Inherits:QAbstractSocket? ? //父类
Inherited By:QSctpSocket and QSslSocket ? //派生类

注意:使用QTcpSocket 必须先在 .pro文件中加入模块 network

函数接口:

//构造函数
QTcpSocket(QObject *parent = nullptr)

//链接服务器 直接填写 IP+端口 即可链接
connectToHost(const QString &, quint16 , QIODevice::OpenMode ,QAbstractSocket::NetworkLayerProtocol )

例子:
    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
       //1.创建一个客户端的通信对象
       QTcpSocket *scoket= new QTcpSocket(this);

       //2.链接服务器
       scoket->connectToHost("192.168.25.32",1000);

       //3.发送消息
       scoket->write("hello");

       //4.关联可读信号
       connect(scoket,SIGNAL(readyRead),this,SLOT(read_data()));
}

数据的收发:
    write(const char *, qint64 )  //发送 qint64 大的数据 
    write(const char *)          //直接发送字符数据 
    write(const QByteArray &)   //发生QByteArray 类型的数据 

//数据的接收
    qint64 read(char *, qint64 )  //读取 qint64 大的数据到  char * 地址 上 
    QByteArray  read(qint64 ) //读取 qint64 大的数据 并返回 
    QByteArray  readAll() //读取所有数据

也可以自定义窗体发送与接收:

点击发送转到槽:

//转到发送槽
void MainWindow::on_pushButton_clicked()
{
   //toPlainText()获取输入框的内容,返回 QString
   QString msg =  ui->textEdit->toPlainText();

   //数据发送write(const QByteArray &),
    scoket->write(msg.toUtf8());
}

注意:QString 转 QByteArray 加 toUtf8()? ?,由于使用toUtf8编码格式,所有消息不能发中文,会出现乱码

而接收数据就要关联可读信号(也就是信号与槽)

? ? ? ? 查看父类接口,点击Singals即可找到

关联可读信号最后,即可编写槽函数

void MainWindow::read_data()
{
    QString msg = scoket->readAll();
    ui->textBrowser->setPlainText(msg);
}

实例代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

//添加网络头文件
#include <QTcpSocket>

QTcpSocket  *socket;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //1.创建一个客户端的通信对象
    socket =  new QTcpSocket(this);


    //2.链接服务器
    socket->connectToHost("192.168.25.2",1000);

    //3.数据的发送
    socket->write("hello");

    //4.关联可读信号
    connect(socket,SIGNAL(readyRead()),this,SLOT(read_date()));


}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
      QString msg  = ui->textEdit->toPlainText();


      socket->write(msg.toUtf8());
}

void MainWindow::read_date()
{
     QString msg  = socket->readAll();

     ui->textBrowser->setPlainText(msg);
}

//练习:实现客户端与调试助手的双向通信

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2021-07-15 23:52:28  更:2021-07-15 23:52:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 12:58:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码