您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

《Qt开发》TCP编程之服务器端程序

该程序包含的内容如下:

  1. TCP服务器端程序,与客户端交互,将接收的数据存储到文件中
  2. 设置界面样式,包含读样式表文件设置样式
  3. 编码格式转换,显示中文不乱码

结合上次开发的客户端程序,测试结果如下:

程序开发记录

1. 新建项目时要选择Network模块

2.在头文件中添加引用

#include <QtNetWork>

添加如下变量和函数

QTcpServer *tcpServer

QTcpSocket *clientConn; //建立连接后获取的套接字

void SetQss();

private slots:

void sendMsg();

void recvMsg();

void on_pBtnSend_clicked();

3. 在源文件中添加编码转换函数,这样plainTextEdit控件中正常显示中文

/*

有的文字中文是GBK的,转成QString

text = QTextCodec::codecForName("GBK")->toUnicode(ba);

有的文字中文是UTF8的,转成QString

text = QTextCodec::codecForName("UTF-8")->toUnicode(ba);

*/

QString GetCorrectUnicode(const QByteArray &ba)

{

QTextCodec::ConverterState state;

QTextCodec *codec = QTextCodec::codecForName("UTF-8");

    QString text = codec->toUnicode(ba.constData(), ba.size(), &state);

if (state.invalidChars > 0)

{

        text = QTextCodec::codecForName("GBK")->toUnicode(ba);

}

else

    {

        text = ba;

    }

return text;

}

4. 在构造函数中添加如下代码

SetQss();

tcpServer = new QTcpServer(this);

if (!tcpServer->listen(QHostAddress::AnyIPv4, 7589));

{

     qDebug() << tcpServer->errorString();

     close();

    

}

connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendMsg()));

5. 其他函数定义如下

//连接槽函数

void ServerEg::conn()

{

    QByteArray block;    //暂存要发送的数据

    QDataStream out(&block, QIODevice::WriteOnly); //使用数据流写入数据

    out.setVersion(QDataStream::Qt_4_6);

    //获取创建连接的子套接字

    clientConn = tcpServer->nextPendingConnection();

    connect(clientConn, SIGNAL(readyRead()), this, SLOT(recvMsg()));

    //connect(clientConn, SIGNAL(disconnected()), clientConn, SLOT(deleteLater()));

    connect(clientConn, SIGNAL(disconnected()), SLOT(deleteLater()));

    clientConn->write("Connected successfully!");

    ui.plainTextEdit->setPlainText("Connected successfully!");

}

//向客户端发送消息

void ServerEg::on_pBtnSend_clicked()

{

    QString string = ui.plainTextEdit->toPlainText();

    clientConn->write(string.toUtf8());

}

//接收客户端消息,并写入文件

void ServerEg::recvMsg()

{

    QByteArray recvByte = clientConn->readAll();

    QString recvStr = GetCorrectUnicode(recvByte);

    ui.plainTextEdit->appendPlainText(recvStr);

    //将收到的数据存储到文件

    QFile file("saveData.txt");

    if (!file.open(QIODevice::WriteOnly | QFile::Append))

        return;

    file.write(recvByte);

    file.close();

}

//读取样式表设置样式

void ServerEg::SetQss()

{

    QString strStyleSheet = "";

    QFile file("Config/StyleSheet.qss");

    file.open(QFile::ReadOnly);

    if (file.isOpen())

    {

        strStyleSheet = QLatin1String(file.readAll());

    }

    this->setStyleSheet(strStyleSheet);

}


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进