Qt5 Network Socket编程 下载本文

内容发布更新时间 : 2024/7/2 3:22:04星期一 下面是文章的全部内容请认真阅读。

Qt多线程TcpSocket开发指南 李良庭整理 2015-03-13

Qt多线程TCP Socket开发指南 预备知识Qt Network 提供了一组用于TCP/IP编程的APIs,例如requests,、cookies、以及使用HTTP协议发送数据,它们通过各种类型的C++ classes完成。

入门指南 调用Qt Network 类,需要包含此C++头文件:

#include 编译链接Qt Network 模块,需要将此行添加到project文件:

QT += network 文章和指南 这些文章包含有关Qt Network设置和网络功能的应用。

? ? ?

Qt网络编程 - 网络功能相关的应用编程; 支持管理 - 一个用来控制系统连接状态的API; 安全的Sockets (SSL) 类 - 安全通信网络Sockets类。

API 参考 以下是相关API参考资料的链接:

?

C++ Classes

第 1 页 共 5 页

Qt多线程TcpSocket开发指南 李良庭整理 2015-03-13

开发示例

这个例子是类似Local Server 的开发示例,但在这里我们将实现一个从QTcpServer 类继承而来的多线程Socket服务器。

为此,我们需要两个类:FortuneServer类、 QTcpServer 子类,其中FortuneThread继承自QThread。

class FortuneServer : public QTcpServer { Q_OBJECT public: FortuneServer( QObject *parent=0); protected: void incomingConnection(qintptr socketDescriptor) Q_DECL_OVERRIDE; private: QStringList fortunes; }; FortuneServer继承 QTcpServer 并重载QTcpServer::incomingConnection(),我们也用它来存储随机数列表。

FortuneServer::FortuneServer(QObject *parent) : QTcpServer(parent) { fortunes << tr(\ << tr(\ << tr(\ 第 2 页 共 5 页

Qt多线程TcpSocket开发指南 李良庭整理 2015-03-13 << tr(\ << tr(\ << tr(\ << tr(\} 我们使用FortuneServer的构造函数简单的产生fortunes列表。

void FortuneServer::incomingConnection(qintptr socketDescriptor) { QString fortune = fortunes.at(qrand() % fortunes.size()); FortuneThread *thread = new FortuneThread(socketDescriptor, fortune, this); connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); thread->start(); } 我们使用 QTcpServer::incomingConnection() 来创建一个FortuneThread对象,通过传入的套接字描述符和一个随机数fortune构造FortuneThread。

通过连接FortuneThread的finished() 信号QObject::deleteLater() ,确保一旦线程执行完成,立即结束线程。线程从QThread::start() 开始执行。

class FortuneThread : public QThread { Q_OBJECT public: FortuneThread(int socketDescriptor, const QString &fortune, QObject *parent); void run() Q_DECL_OVERRIDE; signals: void error(QTcpSocket::SocketError socketError); private: int socketDescriptor; QString text; }; 继续 FortuneThread 类,这是一个QThread 子类,它的工作是将fortune写入连接Socket。重载QThread::run()类时,他会产生一个错误报告信号。

第 3 页 共 5 页