QTcpServer Class

QTcpServer 클래스는 TCP 기반 서버를 제공합니다. 더 보기...

헤더: #include <QTcpServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
상속합니다: QObject
상속 대상

QSctpServerQSslServer

참고: 이 클래스의 모든 함수는 재진입합니다.

공용 함수

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)

Signals

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::ConnectedStateQTcpSocket 에 대한 포인터를 반환합니다.

오류가 발생하면 serverError()는 오류 유형을 반환하고 errorString()를 호출하여 사람이 읽을 수 있는 오류 설명을 얻을 수 있습니다.

연결을 수신 대기할 때 서버가 수신 대기 중인 주소와 포트는 serverAddress() 및 serverPort()로 사용할 수 있습니다.

close()를 호출하면 QTcpServer가 들어오는 연결에 대한 수신 대기 중지를 해제합니다.

QTcpServer는 대부분 이벤트 루프와 함께 사용하도록 설계되었지만 이벤트 루프 없이도 사용할 수 있습니다. 이 경우 연결이 사용 가능하거나 시간 초과가 만료될 때까지 차단하는 waitForNewConnection()를 사용해야 합니다.

QTcpSocket, 포춘 서버, 스레드 포춘 서버, 토렌트 예시를참조하세요 .

멤버 함수 문서

[explicit] QTcpServer::QTcpServer(QObject *parent = nullptr)

QTcpServer 객체를 구축합니다.

parentQObject 생성자에 전달됩니다.

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 을 보류 중인 수신 연결 목록에 추가합니다.

참고: 보류 중인 연결 메커니즘을 중단시키지 않으려면 다시 구현된 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()를 호출하여 보류 중인 연결 메커니즘에 추가해야 합니다.

참고: 다른 스레드에서 들어오는 연결을 새 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이면 포트가 자동으로 선택됩니다. addressQHostAddress::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 보류 중인 연결이 없을 때 이 함수를 호출하면 반환됩니다.

참고: 반환된 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 으로 설정합니다. QTcpServernextPendingConnection()이 호출되기 전에 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 을 반환합니다. 작업 시간이 초과되어 timedOutnullptr 이 아닌 경우 *timedOut 이 true로 설정됩니다.

이것은 차단 함수 호출입니다. 함수가 반환될 때까지 전체 애플리케이션이 응답을 중지하므로 단일 스레드 GUI 애플리케이션에서는 사용하지 않는 것이 좋습니다. waitForNewConnection()은 사용 가능한 이벤트 루프가 없을 때 주로 유용합니다.

차단하지 않는 대안은 newConnection() 신호에 연결하는 것입니다.

msec가 -1이면 이 함수는 시간 초과되지 않습니다.

hasPendingConnections() 및 nextPendingConnection()도 참조하세요 .

© 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.