?回顾c语言中的网络tcp编程:
注意:使用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);
}
//练习:实现客户端与调试助手的双向通信
|