QWebSocketServer
- QWebSocketServer
服务端
- Public Types
- Public Function
QWebSocketServer(const QString &serverName, SslMode secureMode, QObject *parent = Q_NULLPTR)
virtual ~QWebSocketServer()
void close()
QWebSocketProtocol::CloseCode error() const
QString errorString() const
void handleConnection(QTcpSocket *socket) const
bool hasPendingConnections() const
bool isListening() const
bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
int maxPendingConnections() const
virtual QWebSocket *nextPendingConnection()
void pauseAccepting()
QNetworkProxy proxy() const
void resumeAccepting()
SslMode secureMode() const
QHostAddress serverAddress() const
QString serverName() const
quint16 serverPort() const
QUrl serverUrl() const
void setMaxPendingConnections(int numConnections)
void setProxy(const QNetworkProxy &networkProxy)
void setServerName(const QString &serverName)
bool setSocketDescriptor(int socketDescriptor)
void setSslConfiguration(const QSslConfiguration &sslConfiguration)
int socketDescriptor() const
QSslConfiguration sslConfiguration() const
QList<QWebSocketProtocol::Version> supportedVersions() const
- Signals
void acceptError(QAbstractSocket::SocketError socketError)
void closed()
void newConnection()
void originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)
void peerVerifyError(const QSslError &error)
void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
void serverError(QWebSocketProtocol::CloseCode closeCode)
void sslErrors(const QList<QSslError> &errors)
- Additional Inherited Members
- Detailed Description
QWebSocketServer 服务端
Header: #include<QWebSocketServer>
qmake: QT += websockets
Inherits: QObject
Public Types
enum SslMode{ SecureMode,NonSecureMode }
指示服务器是通过wss(SecureMode)还是ws(NonSecureMode)
常量 | 值 | 描述 |
---|---|---|
QWebSocketServer::SecureMode | 0 | 服务器以安全模式运行(通过wss) |
QWebSocketServer::NonSecureMode | 1 | 服务器以非安全模式运行(通过ws) |
Public Function
QWebSocketServer(const QString &serverName, SslMode secureMode, QObject *parent = Q_NULLPTR)
用给定的serverName构造一个新的QWebSocketServer。 serverName将在HTTP握手阶段用于标识服务器。 它可以是空的,在这种情况下,将向客户端发送空的服务器名称。 secureMode参数指示服务器是通过wss(SecureMode)还是通过ws(NonSecureMode)运行。
父项传递给QObject构造函数。
virtual ~QWebSocketServer()
销毁QWebSocketServer对象。 如果服务器正在监听连接,则套接字将自动关闭。 任何仍在排队的客户端QWebSocket都将被关闭并删除。
void close()
关闭服务器。 服务器将不再侦听传入的连接。
QWebSocketProtocol::CloseCode error() const
返回发生的最后一个错误的错误代码。 如果没有发生错误,则返回QWebSocketProtocol::CloseCodeNormal。
QString errorString() const
返回发生的最后一个错误的人类可读描述。 如果没有发生错误,则返回空字符串。
void handleConnection(QTcpSocket *socket) const
升级一个tcp套接字到websocket。
QWebSocketServer对象将获取套接字对象的所有权并在适当时删除它。
bool hasPendingConnections() const
如果服务器有挂起连接,则返回true; 否则返回false。
bool isListening() const
如果服务器当前正在侦听传入连接,则返回true; 否则返回false。 如果侦听失败,error()将返回原因。
bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
通知服务器侦听地址和端口上的传入连接。 如果端口是0,则自动选择一个端口。 如果地址是QHostAddress :: Any,服务器将侦听所有网络接口。
成功返回true; 否则返回false。
int maxPendingConnections() const
返回未决接受连接的最大数量。 默认值是30。
virtual QWebSocket *nextPendingConnection()
作为已连接的QWebSocket对象返回下一个挂起的连接。 QWebSocketServer不拥有返回的QWebSocket对象的所有权。 调用者在不再使用它时显式删除该对象,否则会发生内存泄漏。 如果在没有挂起的连接时调用此函数,则返回Q_NULLPTR。
注意:返回的QWebSocket对象不能从另一个线程使用。
void pauseAccepting()
暂停传入的新连接。 排队的连接将保持队列。
QNetworkProxy proxy() const
返回此服务器的网络代理。 默认情况下使用QNetworkProxy :: DefaultProxy。
void resumeAccepting()
继续接受新的连接。
SslMode secureMode() const
返回运行服务器的安全模式。
QHostAddress serverAddress() const
如果服务器正在侦听连接,则返回服务器的地址; 否则返回QHostAddress :: Null。
QString serverName() const
返回在http握手阶段使用的服务器名称。
quint16 serverPort() const
如果服务器正在侦听连接,则返回服务器的端口; 否则返回0。
QUrl serverUrl() const
如果服务器正在侦听连接,则返回客户端可用于连接到此服务器的URL。 否则,返回无效的URL。
void setMaxPendingConnections(int numConnections)
将未决接受连接的最大数量设置为numConnections。 在调用nextPendingConnection()之前,WebSocketServer将只接受numConnections传入连接。 默认情况下,限制为30个待定连接。
当达到最大连接数时,QWebSocketServer将使用QWebSocketProtocol :: CloseCodeAbnormalDisconnection关闭代码发出error()信号。 WebSocket握手将失败,套接字将被关闭。
void setProxy(const QNetworkProxy &networkProxy)
将此服务器的显式网络代理设置为networkProxy。
要禁用代理服务器,请使用QNetworkProxy :: NoProxy代理服务器类型:
server->setProxy(QNetworkProxy::NoProxy);
void setServerName(const QString &serverName)
将HTTP握手阶段期间将使用的服务器名称设置为给定的serverName。 serverName可以为空,在这种情况下,将向客户端发送空的服务器名称。 现有的连接客户端不会收到此更改的通知,只有新连接的客户端才会看到这个新名称。
bool setSocketDescriptor(int socketDescriptor)
设置此服务器在侦听到socketDescriptor的传入连接时应使用的套接字描述符。
如果套接字设置成功,则返回true; 否则返回false。 假设套接字处于侦听状态。
void setSslConfiguration(const QSslConfiguration &sslConfiguration)
将QWebSocketServer的SSL配置设置为sslConfiguration。 如果QWebSocketServer以非安全模式运行(QWebSocketServer :: NonSecureMode),则此方法不起作用。
int socketDescriptor() const
返回服务器用于侦听传入指令的本机套接字描述符,如果服务器未侦听,则返回-1。 如果服务器正在使用QNetworkProxy,则返回的描述符可能无法用于本地套接字函数。
QSslConfiguration sslConfiguration() const
返回QWebSocketServer使用的SSL配置。 如果服务器未以安全模式运行(QWebSocketServer :: SecureMode),则此方法返回QSslConfiguration :: defaultConfiguration()。
QList<QWebSocketProtocol::Version> supportedVersions() const
返回此服务器支持的WebSocket版本的列表。
32 public functions inherited from QObject
Signals
void acceptError(QAbstractSocket::SocketError socketError)
接受新连接导致错误时发出此信号。 socketError参数描述发生的错误类型。
void closed()
服务器关闭连接时发出此信号。
void newConnection()
每次有新的连接可用时都会发出此信号。
void originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)
当请求新的连接时发出此信号。 连接到这个信号的插槽应该指出是否允许在认证器对象中(通过发出setAllowed())来源(可以由origin()调用确定)。
如果没有插槽连接到这个信号,默认情况下所有的原点将被接受。
注意:使用QueuedConnection连接此信号是不可能的,因为连接将始终成功。
void peerVerifyError(const QSslError &error)
在建立加密之前,QWebSocketServer可以在SSL握手期间多次发出此信号,以指示在建立对等体的身份时发生错误。 该错误通常表示QWebSocketServer无法安全地识别对等体。
当信号出现错误时,该信号为您提供早期指示。 通过连接到此信号,您可以手动选择在握手完成之前从连接的插槽中拆除连接。 如果不采取任何措施,QWebSocketServer将继续发出QWebSocketServer :: sslErrors()。
void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QWebSocketServer在协商PSK密码组时发出此信号,因此需要PSK身份验证。
当使用PSK时,客户端必须向服务器发送一个有效的标识和一个有效的预共享密钥,以便SSL握手继续进行。 应用程序可以在连接到此信号的插槽中提供此信息,方法是根据需要填写已传递的身份验证器对象。
注意:忽略此信号或未能提供所需的凭据将导致握手失败,从而导致连接中止。
注意:验证器对象由套接字拥有,并且不能被应用程序删除。
void serverError(QWebSocketProtocol::CloseCode closeCode)
在建立WebSocket连接期间发生错误时,会发出此信号。 closeCode参数描述发生的错误类型
void sslErrors(const QList<QSslError> &errors)
QWebSocketServer在SSL握手之后发出此信号,以指示在建立对等的身份时发生了一个或多个错误。 这些错误通常表明QWebSocketServer无法安全地识别对等体。 除非采取任何措施,否则在发出此信号后,连接将被丢弃。
错误包含一个或多个阻止QSslSocket验证对等方身份的错误。
2 signals inherited from QObject
Additional Inherited Members
1 property inherited from QObject
1 public slot inherited from QObject
1 public variable inherited from QObject
10 static public members inherited from QObject
9 protected functions inherited from QObject
2 protected variables inherited from QObject
Detailed Description
实现一个基于WebSocket的服务器。
它仿照QTcpServer建模,并且行为相同。所以,如果你知道如何使用QTcpServer,你就知道如何使用QWebSocketServer。这个类可以接受传入的WebSocket连接。您可以指定端口或让QWebSocketServer自动选择一个端口。您可以收听特定地址或所有机器的地址。调用listen()让服务器侦听传入的连接。
每次客户端连接到服务器时,都会发出newConnection()信号。调用nextPendingConnection()以接受挂起的连接作为连接的QWebSocket。该函数返回一个指向QAbstractSocket :: ConnectedState中的QWebSocket的指针,您可以使用该指针与客户端进行通信。
如果发生错误,serverError()将返回错误的类型,并且可以调用errorString()来获取人类可读的描述。
在侦听连接时,服务器侦听的地址和端口可用作serverAddress()和serverPort()。
调用close()使QWebSocketServer停止监听传入的连接。
QWebSocketServer目前不支持WebSocket扩展和WebSocket子协议。
注意:使用自签名证书时,Firefox bug 594502会阻止Firefox连接到安全的WebSocket服务器。要解决此问题,请先使用HTTPS浏览到安全的WebSocket服务器。 FireFox将表明证书无效。从这里开始,证书可以添加到例外中。在此之后,安全的WebSockets连接应该可以工作。
QWebSocketServer仅支持WebSocket协议的版本13,如RFC 6455中所述。
QWebSocketServer的更多相关文章
- 词频统计_输入到文件_update
/* 输入文件见337.in.txt 输出文件见338.out.txt */ #include <iostream> #include <cctype> #include &l ...
- QT:用QWebSocket实现webchannel,实现C++与HTML通信
基本原理是通过channel将C++对象暴露给HTML,在HTML中调用qwebchannel.js.前提是建立transport,QT只提供了一个抽象基类QWebChannelAbstractTra ...
- Qt websocket
1.pro 添加 QT += websockets #ifndef MYWEBSOCKETSERVER_H #define MYWEBSOCKETSERVER_H #include <QObj ...
- 通过WebChannel/WebSockets与QML中的HTML交互
来源:通过WebChannel/WebSockets与QML中的HTML交互 GitHub:八至 作者:狐狸家的鱼 本文链接:QML与HTML交互 在查询QML与HTML之间通信交互时资料很少,这篇文 ...
随机推荐
- java基础-静态,非静态(构造)代码块,类加载
static block and non-static block(constructor block) [toc] 想来想去,先来一题比较好 public class Foo { public st ...
- awk 的 pattern(模式)
我们知道, awk程序由一系列 pattern 以及与之对应的 action 组成的 rule 组成,rule之间用";"分号隔开, 一条输入记录与 pattern 匹配则执行与之 ...
- 2017noip普及组赛前注意事项总结
petr 大神镇场 距人生第一场noip只差4天半了(好紧张) 总结几下四道题的做题策略 NO1 第一题一般是送分的,认真读题,别太草率,多想几遍再动手,把重要的地方圈一圈.画一画,自己找几个数据多试 ...
- mysql数据库在windows下安装与配置
mysql是一种开源源代码的关系型数据库系统(RDBMS),使用最常用的数据库管理语言--结构化查询语句(SQL)进行数据库管理. MySQL是开放源代码的,因此任何人都可以在General Pu ...
- 完全卸载SQL Server 2008r2
完全卸载SQL Server 2008r2 "五一"时进行了系统重装,在没有卸载SQL Server 2008情况下尝试安装SQL Server 2008r2 ,安装提示成功但 ...
- hexo 博客支持PWA和压缩博文
目标网站 https://blog.rmiao.top/ PWA yarn add hexo-offline 然后在root config.yml里新增 # offline config passed ...
- [DeeplearningAI笔记]ML strategy_2_2训练和开发/测试数据集不匹配问题
机器学习策略-不匹配的训练和开发/测试数据 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.4在不同分布上训练和测试数据 在深度学习时代,越来越多的团队使用和开发集/测试集不同分布的数据来 ...
- Hello 2018
愈发觉得写技术博客对于自己写作能力的提升会很有帮助,于是在今天终于用Github+Jekyll的方式搭建了自己的博客,从今往后就在这里记录自己在技术上成长的点滴,希望自己的总结和思考也能帮助到其他人. ...
- Django的思维导图
本人在学习Django的过程中整理的一些知识点 现在整理成思维导图,在以后查阅的时候可以方便自己.
- MOBA 游戏技能系统设计 2.0
随着游戏开发的完整度提升,技能系统的设计复杂性也越来越高,导致了用模板方式的配置方法和处理方法会导致以下几个问题: 代码冗余 排错困难 配置项冗余 熟悉业务流程时间长 扩展性低 经过我思考决定重写之. ...