- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Qt5NetworkSocket编程
Qt多线程TCP Socket开发指南
预备知识
Qt Network 提供了一组用于TCP/IP编程的APIs,例如requests,、cookies、以及使用HTTP协议发送数据,它们通过各种类型的C++ classes完成。
入门指南
调用Qt Network 类,需要包含此C++头文件:
#include QtNetwork
编译链接Qt Network 模块,需要将此行添加到project文件:
QT += network
文章和指南
这些文章包含有关Qt Network设置和网络功能的应用。
Qt网络编程 - 网络功能相关的应用编程;
支持管理 - 一个用来控制系统连接状态的API;
安全的Sockets (SSL) 类?- 安全通信网络Sockets类。
API 参考
以下是相关API参考资料的链接:
C++ Classes
开发示例
这个例子是类似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(Youve been leading a dogs life. Stay off the furniture.)
tr(Youve got to think about tomorrow.)
tr(You will be surprised by a loud noise.)
tr(You will feel hungry again in another hour.)
tr(You might have mail.)
tr(You cannot kill time without injuring eternity.)
tr(Computers are not intelligent. They only think they are.);
}
我们使用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
文档评论(0)