QTcpServer Class
QTcpServer 클래스는 TCP 기반 서버 기능을 제공합니다. 더 보기...
| 헤더: | #include <QTcpServer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 상속: | QObject |
| 상속받는 항목: |
- 상속받은 멤버를 포함한 모든 멤버 목록
- QTcpServer는 네트워크 프로그래밍 API의 일부입니다.
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
공개 함수
| QTcpServer(QObject *parent = nullptr) | |
| virtual | ~QTcpServer() |
| void | close() |
| QString | errorString() const |
| virtual bool | hasPendingConnections() const |
| bool | isListening() const |
| bool | listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
(since 6.3) int | listenBacklogSize() const |
| int | maxPendingConnections() const |
| virtual QTcpSocket * | nextPendingConnection() |
| void | pauseAccepting() |
| QNetworkProxy | proxy() const |
| void | resumeAccepting() |
| QHostAddress | serverAddress() const |
| QAbstractSocket::SocketError | serverError() const |
| quint16 | serverPort() const |
(since 6.3) void | setListenBacklogSize(int size) |
| void | setMaxPendingConnections(int numConnections) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| bool | setSocketDescriptor(qintptr socketDescriptor) |
| qintptr | socketDescriptor() const |
| bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
신호
| void | acceptError(QAbstractSocket::SocketError socketError) |
| void | newConnection() |
(since 6.4) void | pendingConnectionAvailable() |
보호된 함수
| void | addPendingConnection(QTcpSocket *socket) |
| virtual void | incomingConnection(qintptr socketDescriptor) |
상세 설명
이 클래스를 사용하면 들어오는 TCP 연결을 수락할 수 있습니다. 포트를 직접 지정하거나 QTcpServer가 자동으로 선택하도록 할 수 있습니다. 특정 주소 또는 컴퓨터의 모든 주소에서 수신 대기할 수 있습니다.
listen()를 호출하여 서버가 들어오는 연결을 수신 대기하도록 합니다. 그러면 클라이언트가 서버에 연결할 때마다 newConnection() 신호가 발생합니다. addPendingConnection() 함수를 사용하여 클라이언트 연결이 대기 중인 연결 큐에 추가되면 pendingConnectionAvailable() 신호가 발생합니다.
nextPendingConnection()를 호출하여 대기 중인 연결을 연결된 QTcpSocket 로 수락합니다. 이 함수는 클라이언트와 통신하는 데 사용할 수 있는 QAbstractSocket::ConnectedState 내의 QTcpSocket 에 대한 포인터를 반환합니다.
오류가 발생하면 serverError()는 오류 유형을 반환하며, errorString()를 호출하여 발생한 상황에 대한 사람이 읽을 수 있는 설명을 얻을 수 있습니다.
연결을 수신 대기할 때, 서버가 수신 대기 중인 주소와 포트는 serverAddress() 및 serverPort()를 통해 확인할 수 있습니다.
close()를 호출하면 QTcpServer가 들어오는 연결 수신을 중지합니다.
QTcpServer는 주로 이벤트 루프와 함께 사용하도록 설계되었지만, 이벤트 루프 없이도 사용할 수 있습니다. 이 경우, 연결이 가능해질 때까지 또는 타임아웃이 만료될 때까지 차단되는 waitForNewConnection()를 사용해야 합니다.
QTcpSocket, Fortune 서버, 스레드 기반 Fortune 서버 및 토렌트 예제도참조하십시오 .
멤버 함수 문서
[explicit] QTcpServer::QTcpServer(QObject *parent = nullptr)
QTcpServer 객체를 생성합니다.
parent QObject 생성자에 전달됩니다.
listen() 및 setSocketDescriptor()도 참조하십시오 .
[virtual noexcept] QTcpServer::~QTcpServer()
QTcpServer 객체를 삭제합니다. 서버가 연결을 수신 대기 중인 경우, 소켓이 자동으로 닫힙니다.
서버가 삭제되기 전에, 아직 연결된 상태인 모든 클라이언트 ` QTcpSocket` 객체는 연결을 끊거나 부모 객체를 재설정해야 합니다.
close()도 참조하십시오 .
[signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
이 신호는 새로운 연결을 수락하는 과정에서 오류가 발생했을 때 발생합니다. ‘ socketError ’ 매개변수는 발생한 오류의 유형을 나타냅니다.
pauseAccepting() 및 resumeAccepting()도 참조하십시오 .
[protected] void QTcpServer::addPendingConnection(QTcpSocket *socket)
이 함수는 ` QTcpServer::incomingConnection()`에 의해 호출되어 ` socket `를 대기 중인 수신 연결 목록에 추가합니다.
참고: 'Pending Connections' 메커니즘의 정상적인 작동을 방해하지 않으려면, 재구현한 incomingConnection() 내에서 이 멤버 함수를 호출하는 것을잊지 마십시오 . 이 함수는 소켓이 추가된 후 pendingConnectionAvailable() 신호를 발생시킵니다.
incomingConnection() 및 pendingConnectionAvailable()도 참조하십시오 .
void QTcpServer::close()
서버를 종료합니다. 서버는 더 이상 들어오는 연결을 수신 대기하지 않습니다.
listen()도 참조하십시오 .
QString QTcpServer::errorString() const
가장 최근에 발생한 오류에 대한 사람이 읽기 쉬운 설명을 반환합니다.
serverError()도 참조하십시오 .
[virtual] bool QTcpServer::hasPendingConnections() const
서버에 대기 중인 연결이 있으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
nextPendingConnection() 및 setMaxPendingConnections()도 참조하십시오 .
[virtual protected] void QTcpServer::incomingConnection(qintptr socketDescriptor)
이 가상 함수는 새로운 연결이 가능해질 때 ` QTcpServer `에 의해 호출됩니다. ` socketDescriptor ` 인자는 수락된 연결에 대한 네이티브 소켓 디스크립터입니다.
기본 구현은 ` QTcpSocket`를 생성하고, 소켓 디스크립터를 설정한 다음 ` QTcpSocket `를 대기 중인 연결의 내부 목록에 저장합니다. 마지막으로 ` newConnection()`가 호출됩니다.
연결이 가능할 때 서버의 동작을 변경하려면 이 함수를 재구현하십시오.
이 서버가 ` QNetworkProxy `를 사용하는 경우, ` socketDescriptor `는 네이티브 소켓 함수에서는 사용할 수 없을 수 있으므로, ` QTcpSocket::setSocketDescriptor()`와 함께만 사용해야 합니다.
참고: 이 메서드를 재구현하는 과정에서 다른 소켓이 생성된경우 , addPendingConnection()를 호출하여 해당 소켓을 Pending Connections 메커니즘에 추가해야 합니다.
참고: 들어오는 연결을 다른 스레드에서 새로운 QTcpSocket 객체로처리하려면 , socketDescriptor 를 다른 스레드로 전달하고, 그곳에서 QTcpSocket 객체를 생성한 다음, 해당 객체의 setSocketDescriptor() 메서드를 사용해야 합니다.
newConnection(), nextPendingConnection(), addPendingConnection()도 참조하십시오 .
bool QTcpServer::isListening() const
서버가 현재 들어오는 연결을 수신 대기 중이면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
listen()도 참조하십시오 .
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
서버가 주소 address 및 포트 port 에서 들어오는 연결을 수신 대기하도록 지시합니다. port 가 0인 경우, 포트가 자동으로 선택됩니다. address 가 QHostAddress::Any 인 경우, 서버는 모든 네트워크 인터페이스에서 수신 대기합니다.
성공 시 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
isListening()도 참조하십시오 .
[since 6.3] int QTcpServer::listenBacklogSize() const
수락될 연결의 백로그 큐 크기를 반환합니다.
이 함수는 Qt 6.3에서 도입되었습니다.
setListenBacklogSize()도 참조하십시오 .
int QTcpServer::maxPendingConnections() const
대기 중인 수락된 연결의 최대 개수를 반환합니다. 기본값은 30입니다.
setMaxPendingConnections() 및 hasPendingConnections()도 참조하십시오 .
[signal] void QTcpServer::newConnection()
이 신호는 새로운 연결이 가능해질 때마다, 해당 연결이 대기 중인 연결 큐에 추가되었는지 여부와 관계없이 발생합니다.
hasPendingConnections() 및 nextPendingConnection()도 참조하십시오 .
[virtual] QTcpSocket *QTcpServer::nextPendingConnection()
다음 대기 중인 연결을 연결된 ` QTcpSocket ` 객체로 반환합니다.
소켓은 서버의 자식 노드로 생성되므로, QTcpServer 객체가 소멸되면 자동으로 삭제됩니다. 메모리 낭비를 방지하기 위해 사용을 마친 후에는 객체를 명시적으로 삭제하는 것이 좋습니다.
nullptr 대기 중인 연결이 없는 상태에서 이 함수가 호출되면 `is`가 반환됩니다.
참고: 반환된 QTcpSocket 객체는 다른 스레드에서 사용할 수 없습니다. 다른 스레드에서 수신 연결을 사용하려면 incomingConnection()을 재정의해야 합니다.
hasPendingConnections()도 참조하십시오 .
void QTcpServer::pauseAccepting()
새로운 연결 수신을 일시 중지합니다. 대기열에 있는 연결은 그대로 유지됩니다.
resumeAccepting()도 참조하십시오 .
[private signal, since 6.4] void QTcpServer::pendingConnectionAvailable()
이 신호는 대기 중인 연결 큐에 새로운 연결이 추가될 때마다 전송됩니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발생시킬 수는 없습니다.
이 함수는 Qt 6.4에서 도입되었습니다.
hasPendingConnections() 및 nextPendingConnection()도 참조하십시오 .
QNetworkProxy QTcpServer::proxy() const
이 소켓에 대한 네트워크 프록시를 반환합니다. 기본적으로 QNetworkProxy::DefaultProxy 이 사용됩니다.
setProxy() 및 QNetworkProxy도 참조하십시오 .
void QTcpServer::resumeAccepting()
새로운 연결을 다시 수락합니다.
pauseAccepting()도 참조하십시오 .
QHostAddress QTcpServer::serverAddress() const
서버가 연결을 수신 대기 중이면 서버의 주소를 반환하고, 그렇지 않으면 QHostAddress::Null 를 반환합니다.
serverPort() 및 listen()도 참조하십시오 .
QAbstractSocket::SocketError QTcpServer::serverError() const
마지막으로 발생한 오류에 대한 오류 코드를 반환합니다.
errorString()도 참조하십시오 .
quint16 QTcpServer::serverPort() const
서버가 연결을 수신 대기 중이면 서버의 포트를 반환하고, 그렇지 않으면 0을 반환합니다.
serverAddress() 및 listen()도 참조하십시오 .
[since 6.3] void QTcpServer::setListenBacklogSize(int size)
수락될 연결의 백로그 큐 크기를 ` size`로 설정합니다. 운영 체제에서 이 값을 줄이거나 무시할 수도 있습니다. 기본적으로 큐 크기는 50입니다.
참고: 이 속성은 listen()를 호출하기 전에 설정해야 합니다.
이 함수는 Qt 6.3에서 도입되었습니다.
listenBacklogSize()도 참조하십시오 .
void QTcpServer::setMaxPendingConnections(int numConnections)
대기 중인 수락된 연결의 최대 개수를 ` numConnections`로 설정합니다. ` QTcpServer `는 ` nextPendingConnection()`가 호출되기 전까지 ` numConnections ` 개 이하의 수신 연결만 수락합니다. 기본적으로 대기 중인 연결의 제한은 30개입니다.
서버가 대기 중인 연결의 최대 수에 도달한 후에도 클라이언트는 여전히 연결할 수 있습니다(즉, QTcpSocket 는 여전히 connected() 신호를 발생시킬 수 있음). QTcpServer 는 새로운 연결을 더 이상 수락하지 않지만, 운영 체제는 해당 연결들을 대기열에 계속 보관할 수 있습니다.
maxPendingConnections() 및 hasPendingConnections()도 참조하십시오 .
void QTcpServer::setProxy(const QNetworkProxy &networkProxy)
이 소켓에 대한 명시적 네트워크 프록시를 networkProxy 로 설정합니다.
이 소켓에서 프록시 사용을 비활성화하려면 QNetworkProxy::NoProxy 프록시 유형을 사용하십시오:
server->setProxy(QNetworkProxy::NoProxy);proxy() 및 QNetworkProxy도 참조하십시오 .
bool QTcpServer::setSocketDescriptor(qintptr socketDescriptor)
이 서버가 socketDescriptor 으로 들어오는 연결을 수신 대기할 때 사용할 소켓 디스크립터를 설정합니다. 소켓이 성공적으로 설정되면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
소켓은 수신 대기 상태에 있는 것으로 간주됩니다.
socketDescriptor() 및 isListening()도 참조하십시오 .
qintptr QTcpServer::socketDescriptor() const
서버가 들어오는 명령을 수신 대기하는 데 사용하는 네이티브 소켓 디스크립터를 반환하며, 서버가 수신 대기 중이 아닌 경우 -1을 반환합니다.
서버가 QNetworkProxy 를 사용하는 경우, 반환된 디스크립터는 네이티브 소켓 함수와 함께 사용할 수 없을 수도 있습니다.
setSocketDescriptor() 및 isListening()도 참조하십시오 .
bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
최대 msec 밀리초 동안, 또는 들어오는 연결이 가능해질 때까지 대기합니다. 연결이 가능한 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다. 작업이 시간 초과되었고 timedOut 가 nullptr 가 아닌 경우, *timedOut 가 true로 설정됩니다.
이 함수 호출은 차단형입니다. 함수가 반환될 때까지 전체 애플리케이션이 응답을 중단하므로, 단일 스레드 GUI 애플리케이션에서는 이 함수의 사용을 권장하지 않습니다. waitForNewConnection()은 주로 이벤트 루프를 사용할 수 없는 경우에 유용합니다.
비차단 방식의 대안은 newConnection() 시그널에 연결하는 것입니다.
msec이 -1인 경우, 이 함수는 타임아웃되지 않습니다.
hasPendingConnections() 및 nextPendingConnection()도 참조하십시오 .
© 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.