QT TCP客户端实现-世界看热讯

来源:QT教程 2023-05-19 12:53:52


(资料图片)

1.实现

QTcpSocket实例首先是通过connectToHost()尝试连接到服务器,需要指定服务器的IP地址和端口。connectToHost()是异步方式连接服务器,不会阻塞程序运行,连接后发射connected()信号。

如果需要使用阻塞方式连接服务器,则使用waitForConnected()函数阻塞程序运行,直到连接成功或失败。

与服务器建立连接后,就可以向缓冲区写数据或从接收缓冲区读取数据,实现数据的通信。当缓冲区有新数据进入时,会发射readyRead()信号,一般在此信号的槽函数里读取缓冲区数据。

2.示例

#ifndef WIDGET_H#define WIDGET_H#include #include namespace Ui {class Widget;}class Widget : public QWidget{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_btnSend_clicked();void on_btnClear_clicked();void on_btnDisConnect_clicked();void on_btnConnect_clicked();void onConnected();void onDisConnected();void onStateChanged(QAbstractSocket::SocketState);void onReadyRead();private:Ui::Widget *ui;QTcpSocket *m_tcpSocket = nullptr;};#endif // WIDGET_H
#include "widget.h"#include "ui_widget.h"#include Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);m_tcpSocket = new QTcpSocket(this);connect(m_tcpSocket,&QTcpSocket::connected,this,&Widget::onConnected);connect(m_tcpSocket,&QTcpSocket::disconnected,this,&Widget::onDisConnected);connect(m_tcpSocket,&QTcpSocket::stateChanged,this,&Widget::onStateChanged);connect(m_tcpSocket,&QTcpSocket::readyRead,this,&Widget::onReadyRead);}Widget::~Widget(){delete ui;}void Widget::on_btnSend_clicked(){QString msg =ui->leMsg->text();ui->plainTextEdit->appendPlainText("[out]"+msg);QByteArray str = msg.toUtf8();str.append("
");m_tcpSocket->write(str);}void Widget::on_btnClear_clicked(){ui->plainTextEdit->clear();}void Widget::on_btnDisConnect_clicked(){if(m_tcpSocket->state() == QAbstractSocket::ConnectedState){m_tcpSocket->disconnectFromHost();}}void Widget::on_btnConnect_clicked(){QString addr = ui->leAddr->text();qint16 port = ui->lePort->text().toInt();m_tcpSocket->connectToHost(addr,port);ui->btnConnect->setEnabled(false);ui->btnDisConnect->setEnabled(true);}void Widget::onConnected(){ui->plainTextEdit->appendPlainText("**已连接到服务器");ui->plainTextEdit->appendPlainText("**peer address: "+m_tcpSocket->peerAddress().toString());ui->plainTextEdit->appendPlainText("**peer port: "+QString::number(m_tcpSocket->peerPort()));}void Widget::onDisConnected(){ui->plainTextEdit->appendPlainText("**已断开服务器");ui->btnConnect->setEnabled(true);ui->btnDisConnect->setEnabled(false);}void Widget::onStateChanged(QAbstractSocket::SocketState){}void Widget::onReadyRead(){while(m_tcpSocket->canReadLine()){ui->plainTextEdit->appendPlainText("[in] "+m_tcpSocket->readLine());}}

3.与服务器通信

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

关键词:

返回顶部