/*! \internal */ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketState) { Q_ASSERT(m_pSocket); Q_Q(QWebSocket); QAbstractSocket::SocketState webSocketState = this->state(); int port = 80; if (m_requestUrl.scheme() == QStringLiteral("wss")) port = 443; switch (socketState) { case QAbstractSocket::ConnectedState: if (webSocketState == QAbstractSocket::ConnectingState) { m_key = generateKey(); const QString handshake = createHandShakeRequest(m_resourceName, m_requestUrl.host() % QStringLiteral(":") % QString::number(m_requestUrl.port(port)), origin(), QString(), QString(), m_key); if (handshake.isEmpty()) { m_pSocket->abort(); Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError); return; } m_pSocket->write(handshake.toLatin1()); } break; case QAbstractSocket::ClosingState: if (webSocketState == QAbstractSocket::ConnectedState) setSocketState(QAbstractSocket::ClosingState); break; case QAbstractSocket::UnconnectedState: if (webSocketState != QAbstractSocket::UnconnectedState) { setSocketState(QAbstractSocket::UnconnectedState); Q_EMIT q->disconnected(); } break; case QAbstractSocket::HostLookupState: case QAbstractSocket::ConnectingState: case QAbstractSocket::BoundState: case QAbstractSocket::ListeningState: //do nothing //to make C++ compiler happy; break; default: break; } }
/*! \internal */ void WebSocket::processStateChanged(QAbstractSocket::SocketState socketState) { QAbstractSocket::SocketState webSocketState = this->state(); switch (socketState) { case QAbstractSocket::ConnectedState: { if (webSocketState == QAbstractSocket::ConnectingState) { m_key = generateKey(); QString handshake = createHandShakeRequest(m_resourceName, m_requestUrl.host() + ":" + QString::number(m_requestUrl.port(80)), getOrigin(), "", "", m_key); m_pSocket->write(handshake.toLatin1()); } break; } case QAbstractSocket::ClosingState: { if (webSocketState == QAbstractSocket::ConnectedState) { setSocketState(QAbstractSocket::ClosingState); } break; } case QAbstractSocket::UnconnectedState: { if (webSocketState != QAbstractSocket::UnconnectedState) { setSocketState(QAbstractSocket::UnconnectedState); Q_EMIT disconnected(); } break; } case QAbstractSocket::HostLookupState: case QAbstractSocket::ConnectingState: case QAbstractSocket::BoundState: case QAbstractSocket::ListeningState: { //do nothing //to make C++ compiler happy; break; } default: { break; } } }
void QAsioWebSocketParent::hostConnected() { if (!isServer) { //连接后,发送websocket协议的http请求 m_key = generateKey(); const QString handshake = createHandShakeRequest(m_url.ResourceName(), m_url.Host() % QStringLiteral(":") % QString::number(m_url.port(80)), m_origin, QString(), QString(), m_key);//新建key if (handshake.isEmpty()) { disconnectFromHost(); emit error(tr("链接发送数据错误")); return; } write(handshake.toLatin1());//发送key } }