首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt网络聊天室客户端

Qt网络聊天室客户端

作者头像
DeROy
修改2020-08-31 07:42:24
2.2K0
修改2020-08-31 07:42:24
举报
文章被收录于专栏:编程学习基地编程学习基地

基于Qt网络编程客户端

QTcpSocket

QTcpSocket 类提供一个TCP套接字TCP是一个面向连接,可靠的的通信协议,非常适合于连续不断的数据传递

QTcpSocket 是QAbstractSocket类非常方便的一个子类,让你创建一个TCP连接和数据流交流。

QTcpSocket 信号:

readyRead()	//有数据发送过来时触发该信号
disconnected()	//socket->close()触发disconnected()信号,客户端服务端都触发

配置

pro文件添加

QT += network

Public

connectToHost()

连接服务器,参数为服务器地址和端口号

waitForConnected

设置等待连接,设置超时时间

QString ipAddressStr = ui->lineEditAddress->text();
quint16 port = ui->lineEditPort->text().toInt();
socket->connectToHost(ipAddressStr, port);
if(socket->waitForConnected(3000))
{
	//连接成功
	qDebug() << "connect secess";
}
else
{
    qDebug() << socket->errorString();
    return;
}

SIGNAL

disconnected()

Socket close信号,当socket执行close函数之后出发信号

connect(socket, SIGNAL(disconnected()),this,SLOT(disconnectedSlot()));//客户端断开连接

readyRead()

当服务端有数据发送过来的时候触发该信号

connect(socket, SIGNAL(readyRead()),this, SLOT(readyReadSlot())); //接收消息
QByteArray dataBa = socket->readAll();

UI设计

客户端UI设计

TcpClient项目训练

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpSocket>
#include <QMessageBox>
#include <QDateTime>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButtonConnect_clicked();
    void disconnectedSlot();
    void readyReadSlot();
    void on_pushButtonSend_clicked();

private:
    Ui::Widget *ui;
    QTcpSocket *socket;
    bool socketState;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

    socket = new QTcpSocket;
    socketState = false;

    connect(socket, SIGNAL(disconnected()),this, SLOT(disconnectedSlot()));     //客户端断开连接
    connect(socket, SIGNAL(readyRead()),this, SLOT(readyReadSlot()));           //接收消息
}

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

void Widget::on_pushButtonConnect_clicked()
{
    QString ipAddressStr = ui->lineEditAddress->text();
    quint16 port = ui->lineEditPort->text().toInt();

    if(!socketState)
    {
        socket->connectToHost(ipAddressStr, port);
        if(socket->waitForConnected(3000))
        {
            qDebug() << "Connect2Server OK";
            ui->pushButtonConnect->setText("断开连接");
            socketState = true;
        }
        else
        {
            qDebug() << socket->errorString();
            return;
        }
    }
    else
    {
        socket->close();
        ui->pushButtonConnect->setText("连接");
        socketState = false;
    }
}

void Widget::disconnectedSlot()
{
    qDebug()<<"Socket close";
}

void Widget::readyReadSlot()
{
    QByteArray dataBa = socket->readAll();

    QString str = QString(QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss ddd")) +
            ":Recv\n" + str.fromLocal8Bit(dataBa.data());    //本地GBK转Unicode 解决乱码
    ui->textBrowserRecv->append(QString(str));          //送显示
}

void Widget::on_pushButtonSend_clicked()
{
    QString dataStr = ui->textEditSend->toPlainText();
    //QByteArray data = dataStr.toUtf8();        //发送UTF编码数据
    QByteArray data = dataStr.toLocal8Bit();     //发送本地字符(GBK)

    if(socket->isOpen() && socket->isValid())
    {
        socket->write(data);
    }

    QString str = QString(QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss ddd")) +
            ":Recv\n" + str.fromLocal8Bit(data.data());    //本地GBK转Unicode 解决乱码
    ui->textBrowserRecv->append(QString(str));          //送显示
}

关键字【网络聊天室】

End

作者:梦凡

梦想在,终不凡~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程学习基地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • QTcpSocket
  • QTcpSocket 信号:
  • 配置
  • Public
    • connectToHost()
      • waitForConnected
      • SIGNAL
        • disconnected()
          • readyRead()
          • UI设计
          • TcpClient项目训练
            • widget.h
              • widget.cpp
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档