QSslServer Class
TLS를 통해 암호화되고 안전한 TCP 서버를 구현합니다. 더 보기...
| 헤더: | #include <QSslServer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 다음부터: | Qt 6.4 |
| 상속: | QTcpServer |
- 상속된 멤버를 포함한 모든 멤버 목록
- QSslServer는 네트워크 프로그래밍 API의 일부입니다.
공개 함수
| QSslServer(QObject *parent = nullptr) | |
| virtual | ~QSslServer() override |
| int | handshakeTimeout() const |
| void | setHandshakeTimeout(int timeout) |
| void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
| QSslConfiguration | sslConfiguration() const |
신호
| void | alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError) |
| void | handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error) |
| void | peerVerifyError(QSslSocket *socket, const QSslError &error) |
| void | preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator) |
| void | sslErrors(QSslSocket *socket, const QList<QSslError> &errors) |
| void | startedEncryptionHandshake(QSslSocket *socket) |
재구현된 보호 함수
| virtual void | incomingConnection(qintptr socket) override |
상세 설명
QTcpServer 대신 사용하여 TLS(Transport Layer Security)를 통해 TCP 서버를 구현하는 데 사용하는 클래스입니다.
보안 핸드셰이크 설정을 구성하려면 QSslConfiguration 객체에 대한 해당 세터 함수를 사용한 다음, 이를 setSslConfiguration() 함수의 인자로 전달하십시오. 이후 처리되는 모든 수신 연결에는 이 설정이 적용됩니다.
들어오는 연결을 수신 대기하려면 QTcpServer 에서 상속받은 listen() 함수를 사용합니다. 기타 설정은 QTcpServer 클래스에서 상속받은 세터 함수를 사용하여 구성할 수 있습니다.
들어오는 연결 시도에 대응하려면 이 클래스의 신호에 연결하십시오. 이 신호들은 QSslSocket 의 신호와 동일하지만, 해당 소켓에 대한 포인터도 함께 전달합니다.
pendingConnectionAvailable() 신호에 응답할 때는 nextPendingConnection() 함수를 사용하여 다음 수신 연결을 가져오고, 대기 중인 연결 큐에서 이를 제거하십시오. QSslSocket 는 QSslServer의 자식이며, QSslServer가 삭제되면 함께 삭제됩니다. 메모리 낭비를 방지하기 위해 사용을 마친 후에는 객체를 명시적으로 소멸시키는 것이 좋습니다.
QTcpServer, QSslConfiguration 및 QSslSocket도 참조하십시오 .
멤버 함수 문서
[explicit] QSslServer::QSslServer(QObject *parent = nullptr)
지정된 parent 을 사용하여 새로운 QSslServer를 생성합니다.
[override virtual noexcept] QSslServer::~QSslServer()
QSslServer 를 삭제합니다.
열려 있는 모든 연결이 종료됩니다.
[signal] void QSslServer::alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer socket 가 피어로부터 알림 메시지를 수신하면 이 신호를 발생시킵니다. ` `는 알림이 치명적인 오류인지 경고인지 여부를 나타냅니다. ` `는 알림이 전송된 이유를 설명하는 코드입니다. 알림 메시지에 대한 텍스트 설명이 있는 경우, 이는 ` `에 제공됩니다. level type description
참고: 이 신호는 주로 정보 제공 및 디버깅 목적으로 사용되며, 애플리케이션에서 별도로 처리할 필요는 없습니다. 알림이 치명적인 오류인 경우, 기본 백엔드에서 이를 처리하고 연결을 종료합니다.
참고: 모든 백엔드가 이 기능을 지원하는 것은아닙니다 .
관련 항목: alertSent(), QSsl::AlertLevel 및 QSsl::AlertType.
[signal] void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer socket 에서 피어에게 경고 메시지가 전송된 경우 이 신호를 발생시킵니다. 는 경고가 경고(warning)인지 치명적 오류(fatal error)인지를 나타냅니다. 는 경고 메시지의 코드를 제공합니다. 경고 메시지에 대한 텍스트 설명이 있는 경우, 에 해당 내용이 제공됩니다. level type description
참고: 이 신호는 주로 정보 제공용이며 디버깅 목적으로 사용할 수 있습니다. 일반적으로 애플리케이션 측에서 별도의 조치를 취할 필요는 없습니다.
참고: 모든 백엔드가 이 기능을 지원하는 것은아닙니다 .
관련 항목: alertReceived(), QSsl::AlertLevel 및 QSsl::AlertType.
[signal] void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)
이 신호는 핸드셰이크 도중 오류가 발생한 후에 전송됩니다. ‘ socketError ’ 매개변수는 발생한 오류의 유형을 설명합니다.
소켓 핸드셰이크가 암호화 상태에 도달하지 않은 경우, 이 신호가 발송된 후 ` socket `는 자동으로 삭제됩니다. 그러나 ` socket `가 성공적으로 암호화되면, ` QSslServer`의 대기 중인 연결 큐에 삽입됩니다. 사용자가 ` QTcpServer::nextPendingConnection()`를 호출한 경우, ` socket `를 파기하는 것은 사용자의 책임이며, 그렇지 않으면 ` QSslServer ` 객체가 파기될 때까지 ` socket `는 파기되지 않습니다. socket 이 대기 중인 연결 대기열에 삽입된 후 오류가 발생하면, 이 신호는 발생하지 않으며 socket 는 제거되거나 소멸되지 않습니다.
참고: 이 신호에 연결할 때 ` Qt::QueuedConnection `을 사용할수 없습니다. 그렇지 않으면 신호가 처리될 때 ` socket `이 이미 소멸된 상태가 될 수 있습니다.
QSslSocket::error() 및 errorString()도 참조하십시오 .
[signal] void QSslServer::handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)
QSslServer socket 에서 인증서 검증 오류가 발견되었고, 에서 조기 오류 보고가 활성화된 경우 이 신호를 발신합니다. 애플리케이션은 를 검사하여 핸드셰이크를 계속할지, 아니면 중단하고 상대방에게 경고 메시지를 보낼지 결정해야 합니다. 신호-슬롯 연결은 직접적이어야 합니다. QSslConfiguration error
QSslSocket::continueInterruptedHandshake(), sslErrors(), QSslConfiguration::setHandshakeMustInterruptOnError()도 참조하십시오 .
int QSslServer::handshakeTimeout() const
현재 설정된 핸드셰이크 타임아웃을 반환합니다.
setHandshakeTimeout()도 참조하십시오 .
[override virtual protected] void QSslServer::incomingConnection(qintptr socket)
QTcpServer::incomingConnection(qintptr socketDescriptor)를 재구현합니다.
새로운 연결이 설정될 때 호출됩니다.
socket 를 QSslSocket 로 변환합니다.
[signal] void QSslServer::peerVerifyError(QSslSocket *socket, const QSslError &error)
QSslServer SSL 핸드셰이크 도중, 암호화가 설정되기 전에 이 신호를 여러 번 전송하여 상대방의 신원을 확인하는 과정에서 오류가 발생했음을 알릴 수 있습니다. ‘ error ’은 일반적으로 ‘ socket ’가 상대방을 안전하게 식별할 수 없음을 나타냅니다.
이 신호는 문제가 발생했을 때 조기에 이를 알려줍니다. 이 신호에 연결하면, 핸드셰이크가 완료되기 전에 연결된 슬롯 내부에서 수동으로 연결을 끊을 수 있습니다. 아무런 조치가 취해지지 않으면, QSslServer 는 sslErrors()를 발생시키게 됩니다.
sslErrors()도 참조하십시오 .
[signal] void QSslServer::preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)
QSslServer socket 가 PSK 암호 모음을 협상할 때 이 신호를 발신하며, 이에 따라 PSK 인증이 요구됩니다.
PSK를 사용할 때, SSL 핸드셰이크가 계속 진행되려면 서버가 유효한 신원 정보와 유효한 사전 공유 키를 제공해야 합니다. 애플리케이션은 이 신호에 연결된 슬롯을 통해, 전달된 authenticator 객체를 필요에 따라 채워 이 정보를 제공할 수 있습니다.
참고: 이 신호를무시하거나 필요한 자격 증명을 제공하지 않으면 핸드셰이크가 실패하여 연결이 중단됩니다.
참고: ` authenticator `객체는 ` socket `가 소유하며, 애플리케이션에서 이를 삭제해서는 안 됩니다.
참조: QSslPreSharedKeyAuthenticator.
void QSslServer::setHandshakeTimeout(int timeout)
모든 수신 핸드셰이크에 사용할 timeout 값을 밀리초 단위로 설정합니다.
이는 클라이언트가 (악의적이든 실수이든) 서버에 연결되었으나 통신을 시도하거나 핸드셰이크를 시작하지 않는 상황에서 적용됩니다. 이 경우 QSslServer 는 timeout 밀리초가 경과한 후 자동으로 연결을 종료합니다.
기본적으로 타임아웃은 5000 밀리초(5초)입니다.
참고: 기본 TLS프레임워크는 현재 또는 향후 자체적인 타임아웃 로직을 가질 수 있으며, 이 함수는 이에 영향을 미치지 않습니다.
참고: 이 함수에 전달된 timeout 는 새로운 연결에만 적용됩니다. 클라이언트가 이미 연결되어 있는 경우, 연결 시 설정된 타임아웃이 사용됩니다.
handshakeTimeout()도 참조하십시오 .
void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
이후에 들어오는 모든 연결에 사용할 sslConfiguration 를 설정합니다.
모든 핸드셰이크 과정에서 원하는 구성이 적용되도록 하려면 listen()을 호출하기 전에 이 함수를 반드시 호출해야 합니다.
sslConfiguration() 및 QSslSocket::setSslConfiguration()도 참조하십시오 .
QSslConfiguration QSslServer::sslConfiguration() const
현재 SSL 구성을 반환합니다.
setSslConfiguration()도 참조하십시오 .
[signal] void QSslServer::sslErrors(QSslSocket *socket, const QList<QSslError> &errors)
QSslServer 이 신호는 SSL 핸드셰이크 후, 상대방의 신원을 확인하는 과정에서 하나 이상의 오류가 발생했음을 나타내기 위해 발신됩니다. 이러한 오류는 대개 socket 가 상대방을 안전하게 식별할 수 없음을 의미합니다. 별도의 조치가 취해지지 않는 한, 이 신호가 발신된 후 연결이 끊어집니다.
발생한 오류에도 불구하고 연결을 계속 진행하려면, 이 신호에 연결된 슬롯 내부에서 ` QSslSocket::ignoreSslErrors()`를 호출해야 합니다. 나중에 오류 목록에 접근해야 하는 경우, `sslHandshakeErrors()`를 호출할 수 있습니다.
errors QSslSocket 가 상대방의 신원을 확인하는 것을 방해하는 하나 이상의 오류가 포함되어 있습니다.
참고: 이 신호에 연결할 때는 Qt::QueuedConnection 를 사용할수 없으며 , 그렇지 않으면 QSslSocket::ignoreSslErrors()를 호출해도 아무런 효과가 없습니다.
peerVerifyError()도 참조하십시오 .
[signal] void QSslServer::startedEncryptionHandshake(QSslSocket *socket)
이 신호는 socket 에 연결된 클라이언트가 TLS 핸드셰이크를 시작할 때 전송됩니다.
© 2026 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.