QWebSocketServer Class
웹소켓 기반 서버를 구현합니다. 더 보기...
Header: | #include <QWebSocketServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS WebSockets) target_link_libraries(mytarget PRIVATE Qt6::WebSockets) |
qmake: | QT += websockets |
상속합니다: | QObject |
공용 형
enum | SslMode { SecureMode, NonSecureMode } |
공용 함수
QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr) | |
virtual | ~QWebSocketServer() override |
void | close() |
QWebSocketProtocol::CloseCode | error() const |
QString | errorString() const |
void | handleConnection(QTcpSocket *socket) const |
std::chrono::milliseconds | handshakeTimeout() const |
int | handshakeTimeoutMS() 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() |
QWebSocketServer::SslMode | secureMode() const |
QHostAddress | serverAddress() const |
QString | serverName() const |
quint16 | serverPort() const |
QUrl | serverUrl() const |
void | setHandshakeTimeout(std::chrono::milliseconds msec) |
void | setHandshakeTimeout(int msec) |
void | setMaxPendingConnections(int numConnections) |
void | setProxy(const QNetworkProxy &networkProxy) |
void | setServerName(const QString &serverName) |
bool | setSocketDescriptor(qintptr socketDescriptor) |
void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
(since 6.4) void | setSupportedSubprotocols(const QStringList &protocols) |
qintptr | socketDescriptor() const |
QSslConfiguration | sslConfiguration() const |
(since 6.4) QStringList | supportedSubprotocols() const |
QList<QWebSocketProtocol::Version> | supportedVersions() const |
시그널
void | acceptError(QAbstractSocket::SocketError socketError) |
(since 6.2) void | alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
(since 6.2) void | alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
void | closed() |
(since 6.2) void | handshakeInterruptedOnError(const QSslError &error) |
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) |
상세 설명
QTcpServer 를 모델로 하고 있으며 동일하게 동작합니다. 따라서 QTcpServer 을 사용하는 방법을 안다면 QWebSocketServer를 사용하는 방법을 알 수 있습니다. 이 클래스를 사용하면 들어오는 웹소켓 연결을 수락할 수 있습니다. 포트를 지정하거나 QWebSocketServer가 자동으로 포트를 선택하도록 할 수 있습니다. 특정 주소 또는 모든 컴퓨터의 주소에서 수신 대기할 수 있습니다. listen ()를 호출하여 서버가 들어오는 연결을 수신 대기하도록 합니다.
그러면 클라이언트가 서버에 연결할 때마다 newConnection() 신호가 전송됩니다. nextPendingConnection ()를 호출하여 보류 중인 연결을 연결된 QWebSocket 으로 수락합니다. 이 함수는 클라이언트와 통신하는 데 사용할 수 있는 QAbstractSocket::ConnectedState 의 QWebSocket 에 대한 포인터를 반환합니다.
오류가 발생하면 serverError()는 오류 유형을 반환하고 errorString()를 호출하여 사람이 읽을 수 있는 오류 설명을 얻을 수 있습니다.
연결을 수신 대기할 때 서버가 수신 대기 중인 주소와 포트는 serverAddress() 및 serverPort()로 사용할 수 있습니다.
close()를 호출하면 QWebSocketServer가 들어오는 연결에 대한 수신 대기 중지를 해제합니다.
QWebSocketServer는 현재 웹소켓 확장을 지원하지 않습니다.
참고: 자체 서명된 인증서로 작업할 때, Firefox 버그 594502로 인해 Firefox가 보안 웹소켓 서버에 연결할 수 없습니다. 이 문제를 해결하려면 먼저 HTTPS를 사용하여 보안 웹소켓 서버로 이동합니다. FireFox는 인증서가 유효하지 않다고 표시할 것입니다. 여기에서 인증서를 예외에 추가할 수 있습니다. 그 후에는 보안 웹소켓 연결이 작동해야 합니다.
QWebSocketServer는 RFC 6455에 설명된 대로 WebSocket 프로토콜 버전 13만 지원합니다.
서비스 거부를 방지하기 위해 10초의 기본 연결 핸드셰이크 시간 제한이 있으며 setHandshakeTimeout()를 사용하여 사용자 지정할 수 있습니다.
웹소켓 서버 예제 및 QWebSocket 를참조하세요 .
멤버 유형 문서
enum QWebSocketServer::SslMode
서버가 wss(보안 모드) 또는 ws(비보안 모드)로 작동하는지 여부를 나타냅니다.
상수 | 값 | 설명 |
---|---|---|
QWebSocketServer::SecureMode | 0 | 서버가 보안 모드(over wss)로 작동합니다. |
QWebSocketServer::NonSecureMode | 1 | 서버가 비보안 모드(over ws)로 동작합니다. |
멤버 함수 문서
[explicit]
QWebSocketServer::QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr)
주어진 serverName 으로 새 QWebSocketServer를 생성합니다. serverName 은 HTTP 핸드셰이크 단계에서 서버를 식별하는 데 사용됩니다. 비어 있을 수 있으며, 이 경우 서버 이름이 클라이언트에 전송되지 않습니다. secureMode 매개변수는 서버가 wss(SecureMode) 또는 ws(NonSecureMode)를 통해 작동하는지 여부를 나타냅니다.
parent 는 QObject 생성자에 전달됩니다.
[override virtual noexcept]
QWebSocketServer::~QWebSocketServer()
QWebSocketServer 객체를 삭제합니다. 서버가 연결을 수신 대기 중이면 소켓이 자동으로 닫힙니다. 아직 대기 중인 모든 클라이언트 QWebSocket는 닫히고 삭제됩니다.
close()도 참조하세요 .
[signal]
void QWebSocketServer::acceptError(QAbstractSocket::SocketError socketError)
이 신호는 새 연결 수락으로 인해 오류가 발생할 때 발생합니다. socketError 매개변수는 발생한 오류의 유형을 설명합니다.
pauseAccepting() 및 resumeAccepting()도 참조하세요 .
[signal, since 6.2]
void QWebSocketServer::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QWebSocketServer 는 피어로부터 알림 메시지를 수신한 경우 이 신호를 보냅니다. level 는 알림이 치명적인 것인지 경고인지 알려줍니다. type 는 알림이 전송된 이유를 설명하는 코드입니다. 알림 메시지에 대한 텍스트 설명을 사용할 수 있는 경우 description 에 제공됩니다.
참고: 이 신호는 대부분 정보 제공 및 디버깅 목적으로 사용되며 애플리케이션에서 처리할 필요가 없습니다. 경고가 치명적인 경우 기본 백엔드에서 이를 처리하고 연결을 닫습니다.
참고: 모든 백엔드가 이 기능을 지원하는 것은 아닙니다.
이 기능은 Qt 6.2에 도입되었습니다.
alertSent(), QSsl::AlertLevel, QSsl::AlertType 를참조하세요 .
[signal, since 6.2]
void QWebSocketServer::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QWebSocketServer 는 경고 메시지가 피어에게 전송된 경우 이 신호를 보냅니다. level 는 경고인지 치명적인 오류인지 설명합니다. type 는 경고 메시지의 코드를 제공합니다. 경고 메시지에 대한 텍스트 설명이 있는 경우 description 에 제공됩니다.
참고: 이 신호는 대부분 정보 제공용이며 디버깅 목적으로 사용할 수 있으며 일반적으로 애플리케이션에서 어떤 조치도 요구하지 않습니다.
참고: 모든 백엔드가 이 기능을 지원하는 것은 아닙니다.
이 기능은 Qt 6.2에 도입되었습니다.
alertReceived(), QSsl::AlertLevel, QSsl::AlertType 를참조하세요 .
void QWebSocketServer::close()
서버를 닫습니다. 서버가 더 이상 들어오는 연결을 수신 대기하지 않습니다.
[signal]
void QWebSocketServer::closed()
이 신호는 서버가 연결을 닫을 때 발생합니다.
close()도 참조하세요 .
QWebSocketProtocol::CloseCode QWebSocketServer::error() const
마지막으로 발생한 오류에 대한 오류 코드를 반환합니다. 오류가 발생하지 않으면 QWebSocketProtocol::CloseCodeNormal 이 반환됩니다.
errorString()도 참조하세요 .
QString QWebSocketServer::errorString() const
마지막으로 발생한 오류에 대한 사람이 읽을 수 있는 설명을 반환합니다. 오류가 발생하지 않으면 빈 문자열이 반환됩니다.
serverError()도 참조하세요 .
void QWebSocketServer::handleConnection(QTcpSocket *socket) const
socket tcp를 웹소켓으로 업그레이드합니다.
QWebSocketServer 객체는 소켓 객체의 소유권을 가져와 적절한 경우 삭제합니다.
[signal, since 6.2]
void QWebSocketServer::handshakeInterruptedOnError(const QSslError &error)
QWebSocketServer 는 인증서 확인 error 이 발견되고 QSslConfiguration 에서 조기 오류 보고가 활성화된 경우 이 신호를 보냅니다.
이 함수는 Qt 6.2에 도입되었습니다.
sslErrors() 및 QSslConfiguration::setHandshakeMustInterruptOnError()도 참조하십시오 .
std::chrono::milliseconds QWebSocketServer::handshakeTimeout() const
새 연결에 대한 핸드셰이크 시간 제한을 밀리초 단위로 반환합니다.
기본값은 10초입니다. 상대방이 핸드셰이크를 완료하는 데 더 많은 시간을 사용하면 연결이 닫힙니다.
setHandshakeTimeout() 및 handshakeTimeoutMS()도 참조하세요 .
int QWebSocketServer::handshakeTimeoutMS() const
새 연결에 대한 핸드셰이크 시간 제한을 밀리초 단위로 반환합니다.
기본값은 10초입니다. 상대방이 핸드셰이크를 완료하는 데 더 많은 시간을 사용하면 연결이 닫힙니다.
setHandshakeTimeout() 및 handshakeTimeout()도 참조하세요 .
bool QWebSocketServer::hasPendingConnections() const
서버에 보류 중인 연결이 있으면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
nextPendingConnection() 및 setMaxPendingConnections()도 참조하세요 .
bool QWebSocketServer::isListening() const
서버가 현재 수신 연결을 수신 대기 중이면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다. 수신에 실패하면 error()는 이유를 반환합니다.
bool QWebSocketServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
주소 address 및 포트 port 에서 들어오는 연결을 수신 대기하도록 서버에 지시합니다. port 이 0이면 포트가 자동으로 선택됩니다. address 이 QHostAddress::Any 인 경우 서버는 모든 네트워크 인터페이스에서 수신 대기합니다.
성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
isListening()도 참조하세요 .
int QWebSocketServer::maxPendingConnections() const
수락 대기 중인 최대 연결 수를 반환합니다. 기본값은 30개입니다.
setMaxPendingConnections() 및 hasPendingConnections()도 참조하세요 .
[signal]
void QWebSocketServer::newConnection()
이 신호는 새 연결을 사용할 수 있을 때마다 전송됩니다.
hasPendingConnections() 및 nextPendingConnection()도 참조하세요 .
[virtual]
QWebSocket *QWebSocketServer::nextPendingConnection()
다음 보류 중인 연결을 연결된 QWebSocket 객체로 반환합니다. QWebSocketServer 반환된 QWebSocket 객체의 소유권을 가져가지 않습니다. 더 이상 사용하지 않을 때 객체를 명시적으로 삭제하는 것은 호출자의 책임이며, 그렇지 않으면 메모리 누수가 발생합니다. 보류 중인 연결이 없을 때 이 함수를 호출하면 nullptr이 반환됩니다.
참고: 반환된 QWebSocket 객체는 다른 스레드에서 사용할 수 없습니다.
hasPendingConnections()도 참조하세요 .
[signal]
void QWebSocketServer::originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)
이 신호는 새 연결이 요청될 때 발생합니다. 이 신호에 연결된 슬롯은 authenticator 객체에서 오리진( setAllowed() 호출을 통해 확인할 수 있음)이 허용되는지 여부를 나타내야 합니다(오리진() 호출로 확인할 수 있음).
이 신호에 연결된 슬롯이 없으면 기본적으로 모든 오리진이 허용됩니다.
참고: 연결은 항상 성공하므로 이 신호에 연결하기 위해 QueuedConnection을 사용할 수 없습니다.
void QWebSocketServer::pauseAccepting()
들어오는 새 연결을 일시 중지합니다. 큐에 대기 중인 연결은 대기열에 남아 있습니다.
resumeAccepting()도 참조하세요 .
[signal]
void QWebSocketServer::peerVerifyError(const QSslError &error)
QWebSocketServer 는 SSL 핸드셰이크 중에 암호화가 설정되기 전에 이 신호를 여러 번 전송하여 상대방의 신원을 설정하는 동안 오류가 발생했음을 나타낼 수 있습니다. error 은 일반적으로 QWebSocketServer 이 피어를 안전하게 식별할 수 없음을 나타냅니다.
이 신호는 문제가 발생했을 때 조기에 알려줍니다. 이 신호에 연결하면 핸드셰이크가 완료되기 전에 연결된 슬롯 내부에서 수동으로 연결을 끊도록 선택할 수 있습니다. 아무런 조치를 취하지 않으면 QWebSocketServer 에서 QWebSocketServer::sslErrors()을 전송합니다.
sslErrors()도 참조하세요 .
[signal]
void QWebSocketServer::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QWebSocketServer 는 PSK 암호 스위트를 협상할 때 이 신호를 보내므로 PSK 인증이 필요합니다.
PSK를 사용할 때 클라이언트는 유효한 ID와 유효한 사전 공유 키를 서버에 보내야 SSL 핸드셰이크를 계속할 수 있습니다. 애플리케이션은 필요에 따라 전달된 authenticator 객체를 채워 이 신호에 연결된 슬롯에 이 정보를 제공할 수 있습니다.
참고: 이 신호를 무시하거나 필요한 자격 증명을 제공하지 않으면 핸드셰이크가 실패하여 연결이 중단됩니다.
참고: authenticator 객체는 소켓이 소유하며 애플리케이션에서 삭제해서는 안 됩니다.
QSslPreSharedKeyAuthenticator 및 QSslSocket::preSharedKeyAuthenticationRequired()도 참조하세요 .
QNetworkProxy QWebSocketServer::proxy() const
이 서버의 네트워크 프록시를 반환합니다. 기본적으로 QNetworkProxy::DefaultProxy 이 사용됩니다.
setProxy()도 참조하세요 .
void QWebSocketServer::resumeAccepting()
새 연결 수락을 다시 시작합니다.
pauseAccepting()도 참조하세요 .
QWebSocketServer::SslMode QWebSocketServer::secureMode() const
서버가 실행 중인 보안 모드를 반환합니다.
QWebSocketServer() 및 SslMode도 참조하세요 .
QHostAddress QWebSocketServer::serverAddress() const
서버가 연결을 수신 대기 중이면 서버의 주소를 반환하고, 그렇지 않으면 QHostAddress::Null 을 반환합니다.
serverPort() 및 listen()도 참조하세요 .
[signal]
void QWebSocketServer::serverError(QWebSocketProtocol::CloseCode closeCode)
이 신호는 웹소켓 연결을 설정하는 동안 오류가 발생할 때 발생합니다. closeCode 매개 변수는 발생한 오류 유형을 설명합니다.
errorString()도 참조하세요 .
QString QWebSocketServer::serverName() const
http 핸드셰이크 단계에서 사용되는 서버 이름을 반환합니다.
setServerName()도 참조하세요 .
quint16 QWebSocketServer::serverPort() const
서버가 연결을 수신 대기 중이면 서버의 포트를 반환하고, 그렇지 않으면 0을 반환합니다.
serverAddress() 및 listen()도 참조하세요 .
QUrl QWebSocketServer::serverUrl() const
서버가 연결을 수신 대기 중인 경우 클라이언트가 이 서버에 연결하는 데 사용할 수 있는 URL을 반환합니다. 그렇지 않으면 잘못된 URL이 반환됩니다.
serverPort(), serverAddress() 및 listen()도 참조하세요 .
void QWebSocketServer::setHandshakeTimeout(std::chrono::milliseconds msec)
새 연결에 대한 핸드셰이크 시간 제한을 msec 밀리초로 설정합니다.
기본적으로 이 값은 10초로 설정되어 있습니다. 상대방이 핸드셰이크를 완료하는 데 더 많은 시간을 사용하면 연결이 끊어집니다. 음수 값(예: -1)을 전달하여 시간 초과를 비활성화할 수 있습니다.
handshakeTimeout() 및 handshakeTimeoutMS()도 참조하세요 .
void QWebSocketServer::setHandshakeTimeout(int msec)
과부하가 걸린 기능입니다.
void QWebSocketServer::setMaxPendingConnections(int numConnections)
수락 대기 중인 최대 연결 수를 numConnections 으로 설정합니다. WebSocketServer 은 nextPendingConnection()이 호출되기 전에 numConnections 수신 연결을 더 이상 수락하지 않습니다. 기본적으로 제한은 30개의 보류 중인 연결입니다.
QWebSocketServer 최대 연결 수에 도달하면 QWebSocketProtocol::CloseCodeAbnormalDisconnection 닫기 코드와 함께 error() 신호를 보냅니다. 웹소켓 핸드셰이크가 실패하고 소켓이 닫힙니다.
maxPendingConnections() 및 hasPendingConnections()도 참조하세요 .
void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)
이 서버의 명시적 네트워크 프록시를 networkProxy 로 설정합니다.
프록시 사용을 사용하지 않으려면 QNetworkProxy::NoProxy 프록시 유형을 사용합니다:
server->setProxy(QNetworkProxy::NoProxy);
proxy()도 참조하세요 .
void QWebSocketServer::setServerName(const QString &serverName)
HTTP 핸드셰이크 단계에서 사용할 서버 이름을 지정된 serverName 으로 설정합니다. serverName 은 비어 있을 수 있으며, 이 경우 빈 서버 이름이 클라이언트에 전송됩니다. 기존에 연결된 클라이언트에게는 이 변경 사항이 통보되지 않으며 새로 연결하는 클라이언트만 이 새 이름을 보게 됩니다.
serverName()도 참조하세요 .
bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor)
socketDescriptor 로 들어오는 연결을 수신 대기할 때 이 서버가 사용할 소켓 설명자를 설정합니다.
소켓이 성공적으로 설정되면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 소켓은 수신 대기 상태인 것으로 간주됩니다.
socketDescriptor() 및 isListening()도 참조하세요 .
void QWebSocketServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
QWebSocketServer 에 대한 SSL 구성을 sslConfiguration 으로 설정합니다. 이 방법은 QWebSocketServer 이 비보안 모드에서 실행되는 경우에는 적용되지 않습니다(QWebSocketServer::NonSecureMode).
sslConfiguration() 및 SslMode 을참조하세요 .
[since 6.4]
void QWebSocketServer::setSupportedSubprotocols(const QStringList &protocols)
서버가 지원하는 프로토콜 목록을 protocols 로 설정합니다.
이 함수는 Qt 6.4에 도입되었습니다.
supportedSubprotocols()도 참조하십시오 .
qintptr QWebSocketServer::socketDescriptor() const
서버가 수신 명령을 수신 대기하는 데 사용하는 네이티브 소켓 기술자를 반환하거나, 서버가 수신 대기 중이 아닌 경우 -1을 반환합니다. 서버가 QNetworkProxy 를 사용하는 경우 반환된 기술자는 네이티브 소켓 함수에서 사용할 수 없을 수 있습니다.
setSocketDescriptor() 및 isListening()도 참조하세요 .
QSslConfiguration QWebSocketServer::sslConfiguration() const
QWebSocketServer 에서 사용하는 SSL 구성을 반환합니다. 서버가 보안 모드(QWebSocketServer::SecureMode)로 실행되고 있지 않은 경우 이 메서드는 QSslConfiguration::defaultConfiguration()를 반환합니다.
setSslConfiguration(), SslMode, QSslConfiguration::defaultConfiguration()도 참조하세요 .
[signal]
void QWebSocketServer::sslErrors(const QList<QSslError> &errors)
QWebSocketServer 는 SSL 핸드셰이크 후 이 신호를 전송하여 상대방의 신원을 확인하는 동안 하나 이상의 오류가 발생했음을 나타냅니다. 오류는 일반적으로 QWebSocketServer 에서 피어를 안전하게 식별할 수 없음을 나타냅니다. 아무런 조치를 취하지 않으면 이 신호가 전송된 후 연결이 끊어집니다.
errors 에 하나 이상의 오류가 포함되어 있어 QSslSocket 에서 피어의 신원을 확인하지 못합니다.
peerVerifyError()도 참조하세요 .
[since 6.4]
QStringList QWebSocketServer::supportedSubprotocols() const
서버가 지원하는 프로토콜 목록을 반환합니다.
이 함수는 Qt 6.4에 도입되었습니다.
setSupportedSubprotocols()도 참조하십시오 .
QList<QWebSocketProtocol::Version> QWebSocketServer::supportedVersions() const
이 서버가 지원하는 웹소켓 버전 목록을 반환합니다.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.