QAbstractSocket Class
QAbstractSocket 클래스는 모든 소켓 유형에 공통적으로 적용되는 기본 기능을 제공합니다. 더 보기...
| 헤더: | #include <QAbstractSocket> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 상속: | QIODevice |
| 상속받는 항목: | QTcpSocket 그리고 QUdpSocket |
- 상속받은 멤버를 포함한 모든 멤버 목록
- QAbstractSocket은 네트워크 프로그래밍 API의 일부입니다.
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
공개 유형
| enum | BindFlag { ShareAddress, DontShareAddress, ReuseAddressHint, DefaultForPlatform } |
| flags | BindMode |
| enum | NetworkLayerProtocol { IPv4Protocol, IPv6Protocol, AnyIPProtocol, UnknownNetworkLayerProtocol } |
| enum | PauseMode { PauseNever, PauseOnSslErrors } |
| flags | PauseModes |
| enum | SocketError { ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError } |
| enum | SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, TypeOfServiceOption, …, KeepAliveCountOption } |
| enum | SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState } |
| enum | SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType } |
공개 함수
| QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent) | |
| virtual | ~QAbstractSocket() |
| void | abort() |
| virtual bool | bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform) |
| bool | bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform) |
(since 6.2) bool | bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform) |
| virtual void | connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) |
| void | connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite) |
| virtual void | disconnectFromHost() |
| QAbstractSocket::SocketError | error() const |
| bool | flush() |
| bool | isValid() const |
| QHostAddress | localAddress() const |
| quint16 | localPort() const |
| QAbstractSocket::PauseModes | pauseMode() const |
| QHostAddress | peerAddress() const |
| QString | peerName() const |
| quint16 | peerPort() const |
| QString | protocolTag() const |
| QNetworkProxy | proxy() const |
| qint64 | readBufferSize() const |
| virtual void | resume() |
| void | setPauseMode(QAbstractSocket::PauseModes pauseMode) |
| void | setProtocolTag(const QString &tag) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| virtual void | setReadBufferSize(qint64 size) |
| virtual bool | setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) |
| virtual void | setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) |
| virtual qintptr | socketDescriptor() const |
| virtual QVariant | socketOption(QAbstractSocket::SocketOption option) |
| QAbstractSocket::SocketType | socketType() const |
| QAbstractSocket::SocketState | state() const |
| virtual bool | waitForConnected(int msecs = 30000) |
| virtual bool | waitForDisconnected(int msecs = 30000) |
재구현된 공용 함수
| virtual qint64 | bytesAvailable() const override |
| virtual qint64 | bytesToWrite() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
| virtual bool | waitForBytesWritten(int msecs = 30000) override |
| virtual bool | waitForReadyRead(int msecs = 30000) override |
신호
| void | connected() |
| void | disconnected() |
| void | errorOccurred(QAbstractSocket::SocketError socketError) |
| void | hostFound() |
| void | proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) |
| void | stateChanged(QAbstractSocket::SocketState socketState) |
보호된 함수
| void | setLocalAddress(const QHostAddress &address) |
| void | setLocalPort(quint16 port) |
| void | setPeerAddress(const QHostAddress &address) |
| void | setPeerName(const QString &name) |
| void | setPeerPort(quint16 port) |
| void | setSocketError(QAbstractSocket::SocketError socketError) |
| void | setSocketState(QAbstractSocket::SocketState state) |
재구현된 보호 함수
| virtual qint64 | readData(char *data, qint64 maxSize) override |
| virtual qint64 | readLineData(char *data, qint64 maxlen) override |
| virtual qint64 | skipData(qint64 maxSize) override |
| virtual qint64 | writeData(const char *data, qint64 size) override |
상세 설명
QAbstractSocket은 QTcpSocket 및 QUdpSocket 의 기저 클래스이며, 이 두 클래스의 모든 공통 기능을 포함하고 있습니다. 소켓이 필요한 경우 다음 두 가지 옵션이 있습니다.
- QTcpSocket 또는 QUdpSocket 를 인스턴스화합니다.
- 네이티브 소켓 디스크립터를 생성하고, QAbstractSocket을 인스턴스화한 다음, setSocketDescriptor()를 호출하여 네이티브 소켓을 래핑합니다.
TCP(전송 제어 프로토콜)는 신뢰성이 높고, 스트림 지향적이며, 연결 지향적인 전송 프로토콜입니다. UDP(User Datagram Protocol)는 비신뢰성, 데이터그램 지향, 비연결형 프로토콜입니다. 실질적으로 이는 TCP가 지속적인 데이터 전송에 더 적합하다는 것을 의미하며, 반면 신뢰성이 중요하지 않은 경우에는 더 가벼운 UDP를 사용할 수 있습니다.
QAbstractSocket의 API는 두 프로토콜 간의 대부분의 차이점을 통합합니다. 예를 들어, UDP는 연결이 필요 없는 프로토콜이지만, ` connectToHost()`는 UDP 소켓에 대한 가상 연결을 설정하므로, 기본 프로토콜에 관계없이 QAbstractSocket을 거의 동일한 방식으로 사용할 수 있습니다. 내부적으로 QAbstractSocket은 ` connectToHost()`에 전달된 주소와 포트를 기억하며, ` read()` 및 ` write()`와 같은 함수는 이러한 값을 사용합니다.
QAbstractSocket은 언제든지 특정 상태를 가지며( state()가 반환), 초기 상태는 UnconnectedState 입니다. connectToHost()를 호출한 후, 소켓은 먼저 HostLookupState 상태로 들어갑니다. 호스트가 발견되면 QAbstractSocket은 ConnectingState 상태로 진입하며 hostFound() 신호를 발생시킵니다. 연결이 수립되면 ConnectedState 상태로 진입하며 connected() 신호를 발생시킵니다. 어느 단계에서든 오류가 발생하면 errorOccurred() 신호가 발생합니다. 상태가 변경될 때마다 stateChanged() 신호가 발생합니다. 편의상 isValid()은 소켓이 읽기 및 쓰기 준비가 되어 있을 때 true 를 반환하지만, 읽기 및 쓰기가 이루어지기 전에 소켓의 상태가 ConnectedState 상태여야 한다는 점에 유의하십시오.
read() 또는 write()을 호출하여 데이터를 읽거나 쓰거나, readLine() 및 readAll()과 같은 편의 함수를 사용할 수 있습니다. 또한 QAbstractSocket은 QIODevice 에서 getChar(), putChar() 및 ungetChar()을 상속받으며, 이 함수들은 단일 바이트 단위로 작동합니다. bytesWritten() 신호는 소켓에 데이터가 기록되었을 때 발생합니다. Qt는 쓰기 버퍼 크기를 제한하지 않는다는 점에 유의하십시오. 이 신호를 수신하여 버퍼 크기를 모니터링할 수 있습니다.
readyRead() 신호는 새로운 데이터 청크가 도착할 때마다 발생합니다. 이때 bytesAvailable()은 읽을 수 있는 바이트 수를 반환합니다. 일반적으로 readyRead() 신호를 슬롯에 연결하여 해당 슬롯에서 사용 가능한 모든 데이터를 읽게 됩니다. 데이터를 한 번에 모두 읽지 않더라도 나머지 데이터는 나중에 계속 사용할 수 있으며, 새로 들어오는 데이터는 QAbstractSocket의 내부 읽기 버퍼에 추가됩니다. 읽기 버퍼의 크기를 제한하려면 setReadBufferSize()를 호출하십시오.
소켓을 닫으려면 ` disconnectFromHost()`를 호출하십시오. QAbstractSocket은 ` QAbstractSocket::ClosingState`로 진입합니다. 보류 중인 모든 데이터가 소켓에 쓰인 후, QAbstractSocket은 소켓을 실제로 닫고 ` QAbstractSocket::UnconnectedState`로 진입한 뒤 ` disconnected()`를 발생시킵니다. 대기 중인 모든 데이터를 버리고 연결을 즉시 중단하려면 대신 abort()을 호출하십시오. 원격 호스트가 연결을 닫으면, QAbstractSocket은 errorOccurred(QAbstractSocket::RemoteHostClosedError) 신호를 발생시키며, 이 동안 소켓 상태는 여전히 ConnectedState 를 유지한 후, disconnected() 신호가 발생합니다.
연결된 피어의 포트와 주소는 peerPort() 및 peerAddress()를 호출하여 가져옵니다. peerName()는 connectToHost()에 전달된 대로 피어의 호스트 이름을 반환합니다. localPort() 및 localAddress()는 로컬 소켓의 포트와 주소를 반환합니다.
QAbstractSocket은 특정 신호가 발생될 때까지 호출 스레드를 일시 중지시키는 일련의 함수를 제공합니다. 이러한 함수를 사용하여 차단형 소켓을 구현할 수 있습니다:
- waitForConnected()는 연결이 설정될 때까지 차단됩니다.
- waitForReadyRead()는 읽을 수 있는 새로운 데이터가 있을 때까지 차단됩니다.
- waitForBytesWritten()는 소켓에 데이터 페이로드 하나가 기록될 때까지 차단됩니다.
- waitForDisconnected()는 연결이 종료될 때까지 차단됩니다.
다음은 예시입니다:
int numRead = 0, numReadTotal = 0;
char buffer[50];
forever {
numRead = socket.read(buffer, 50);
// do whatever with array
numReadTotal += numRead;
if (numRead == 0 && !socket.waitForReadyRead())
break;
}waitForReadyRead()가 false 를 반환하면, 연결이 종료되었거나 오류가 발생한 것입니다.
블로킹 소켓을 사용한 프로그래밍은 비블로킹 소켓을 사용한 프로그래밍과 근본적으로 다릅니다. 블로킹 소켓은 이벤트 루프가 필요하지 않으며, 일반적으로 더 간단한 코드를 작성할 수 있게 해줍니다. 그러나 GUI 애플리케이션에서는 사용자 인터페이스가 멈추는 것을 방지하기 위해 블로킹 소켓을 비GUI 스레드에서만 사용해야 합니다. 두 접근 방식에 대한 개요는 fortuneclient 및 blockingfortuneclient 예제를 참조하십시오.
참고: 신호와 함께 차단형 함수를 사용하는 것은 권장하지않습니다 . 두 가지 방법 중 하나만 사용해야 합니다.
QAbstractSocket은 QTextStream 및 QDataStream 의 스트림 연산자(operator<<() 및 operator>>())와 함께 사용할 수 있습니다. 다만 주의해야 할 점이 하나 있습니다. operator>>()를 사용하여 데이터를 읽기 전에 충분한 데이터가 준비되어 있는지 반드시 확인해야 합니다.
QNetworkAccessManager 및 QTcpServer도 참조하십시오 .
멤버 유형 문서
enum QAbstractSocket::BindFlag
flags QAbstractSocket::BindMode
이 열거형은 QAbstractSocket::bind()의 동작을 수정하기 위해 전달할 수 있는 다양한 플래그를 설명합니다.
| 상수 | 상수명 | 상수설명 |
|---|---|---|
QAbstractSocket::ShareAddress | 0x1 | 다른 서비스가 동일한 주소와 포트에 바인딩하도록 허용합니다. 이는 여러 프로세스가 동일한 주소와 포트를 수신 대기하여 단일 서비스의 부하를 분담할 때 유용합니다(예: 여러 개의 사전 포크된 리스너를 가진 웹 서버는 응답 시간을 크게 향상시킬 수 있습니다). 그러나 모든 서비스가 재바인딩을 허용하기 때문에, 이 옵션은 특정 보안 고려 사항이 따릅니다. 이 옵션을 ReuseAddressHint와 함께 사용하면 서비스가 기존 공유 주소를 재바인딩할 수도 있게 된다는 점에 유의하십시오. Unix에서는 이것이 SO_REUSEADDR 소켓 옵션과 동일합니다. Windows에서는 이것이 기본 동작이므로 이 옵션은 무시됩니다. |
QAbstractSocket::DontShareAddress | 0x2 | 주소와 포트를 독점적으로 바인딩하여 다른 서비스가 재바인딩할 수 없도록 합니다. 이 옵션을 QAbstractSocket::bind()에 전달하면, 성공 시 해당 주소와 포트를 수신 대기하는 서비스가 오직 하나뿐임을 보장받을 수 있습니다. ReuseAddressHint를 전달하더라도 어떤 서비스도 재바인딩할 수 없습니다. 이 옵션은 ShareAddress보다 더 높은 보안성을 제공하지만, 특정 운영 체제에서는 관리자 권한으로 서버를 실행해야 합니다. 유닉스 및 macOS에서는 주소와 포트를 바인딩할 때 공유하지 않는 것이 기본 동작이므로 이 옵션은 무시됩니다. Windows에서는 이 옵션이 SO_EXCLUSIVEADDRUSE 소켓 옵션을 사용합니다. |
QAbstractSocket::ReuseAddressHint | 0x4 | QAbstractSocket 에, 주소와 포트가 이미 다른 소켓에 바인딩되어 있더라도 서비스를 재바인딩하도록 시도해야 한다는 힌트를 제공합니다. Windows 및 Unix에서는 이 옵션이 SO_REUSEADDR 소켓 옵션과 동일합니다. |
QAbstractSocket::DefaultForPlatform | 0x0 | 현재 플랫폼의 기본 옵션입니다. 유닉스 및 macOS에서는 이 옵션이 (DontShareAddress + ReuseAddressHint)와 동일하며, Windows에서는 ShareAddress와 동일합니다. |
BindMode 유형은 QFlags<BindFlag>에 대한 typedef입니다. 이 유형은 BindFlag 값들의 OR 조합을 저장합니다.
enum QAbstractSocket::NetworkLayerProtocol
이 열거형은 Qt Network에서 사용되는 네트워크 계층 프로토콜 값을 설명합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QAbstractSocket::IPv4Protocol | 0 | IPv4 |
QAbstractSocket::IPv6Protocol | 1 | IPv6 |
QAbstractSocket::AnyIPProtocol | 2 | IPv4 또는 IPv6 |
QAbstractSocket::UnknownNetworkLayerProtocol | -1 | IPv4 및 IPv6 이외 |
QHostAddress::protocol()도 참조하십시오 .
enum QAbstractSocket::PauseMode
flags QAbstractSocket::PauseModes
이 열거형은 소켓이 데이터 전송을 일시 중지해야 하는 상황을 설명합니다. 현재 지원되는 유일한 알림은 ` QSslSocket::sslErrors()`입니다.
| 상수 | 값 | 설명 |
|---|---|---|
QAbstractSocket::PauseNever | 0x0 | 소켓에서 데이터 전송을 일시 중지하지 않습니다. 이는 기본값이며 Qt 4의 동작과 일치합니다. |
QAbstractSocket::PauseOnSslErrors | 0x1 | SSL 오류 알림을 수신하면 소켓의 데이터 전송을 일시 중지합니다. 즉, ` QSslSocket::sslErrors()`입니다. |
PauseModes 유형은 QFlags<PauseMode>에 대한 typedef입니다. 이 유형은 PauseMode 값들의 OR 조합을 저장합니다.
enum QAbstractSocket::SocketError
이 열거형은 발생할 수 있는 소켓 오류를 설명합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QAbstractSocket::ConnectionRefusedError | 0 | 상대방이 연결을 거부했습니다(또는 시간 초과됨). |
QAbstractSocket::RemoteHostClosedError | 1 | 원격 호스트가 연결을 닫았습니다. 원격 종료 알림이 전송된 후 클라이언트 소켓(즉, 이 소켓)이 닫힌다는 점에 유의하십시오. |
QAbstractSocket::HostNotFoundError | 2 | 호스트 주소를 찾을 수 없습니다. |
QAbstractSocket::SocketAccessError | 3 | 응용 프로그램에 필요한 권한이 부족하여 소켓 작업이 실패했습니다. |
QAbstractSocket::SocketResourceError | 4 | 로컬 시스템의 리소스가 부족했습니다(예: 소켓이 너무 많음). |
QAbstractSocket::SocketTimeoutError | 5 | 소켓 작업이 시간 초과되었습니다. |
QAbstractSocket::DatagramTooLargeError | 6 | 데이터그램 크기가 운영 체제의 제한(최소 8192바이트)을 초과했습니다. |
QAbstractSocket::NetworkError | 7 | 네트워크에 오류가 발생했습니다(예: 네트워크 케이블이 실수로 뽑혔음). |
QAbstractSocket::AddressInUseError | 8 | QAbstractSocket::bind()에 지정된 주소가 이미 사용 중이며, 배타적으로 설정되어 있습니다. |
QAbstractSocket::SocketAddressNotAvailableError | 9 | QAbstractSocket::bind()에 지정된 주소가 해당 호스트에 속하지 않습니다. |
QAbstractSocket::UnsupportedSocketOperationError | 10 | 요청된 소켓 작업이 로컬 운영 체제에서 지원되지 않습니다(예: IPv6 지원 부족). |
QAbstractSocket::ProxyAuthenticationRequiredError | 12 | 소켓이 프록시를 사용하고 있으며, 프록시에서 인증을 요구합니다. |
QAbstractSocket::SslHandshakeFailedError | 13 | SSL/TLS 핸드셰이크에 실패하여 연결이 종료되었습니다( QSslSocket 에서만 사용됨). |
QAbstractSocket::UnfinishedSocketOperationError | 11 | QAbstractSocketEngine에서만 사용되며, 마지막으로 시도한 작업이 아직 완료되지 않았습니다(백그라운드에서 진행 중). |
QAbstractSocket::ProxyConnectionRefusedError | 14 | 해당 서버에 대한 연결이 거부되어 프록시 서버에 연결할 수 없습니다. |
QAbstractSocket::ProxyConnectionClosedError | 15 | 프록시 서버에 대한 연결이 예기치 않게 종료되었습니다(최종 피어와의 연결이 설정되기 전). |
QAbstractSocket::ProxyConnectionTimeoutError | 16 | 프록시 서버에 대한 연결이 시간 초과되었거나, 인증 단계에서 프록시 서버가 응답을 중단했습니다. |
QAbstractSocket::ProxyNotFoundError | 17 | setProxy()로 설정된 프록시 주소(또는 애플리케이션 프록시)를 찾을 수 없습니다. |
QAbstractSocket::ProxyProtocolError | 18 | 프록시 서버의 응답을 이해할 수 없어 프록시 서버와의 연결 협상이 실패했습니다. |
QAbstractSocket::OperationError | 19 | 소켓이 해당 작업을 허용하지 않는 상태인 동안 작업이 시도되었습니다. |
QAbstractSocket::SslInternalError | 20 | 사용 중인 SSL 라이브러리에서 내부 오류가 보고되었습니다. 이는 라이브러리의 설치 오류나 잘못된 구성으로 인한 것일 가능성이 높습니다. |
QAbstractSocket::SslInvalidUserDataError | 21 | 유효하지 않은 데이터(인증서, 키, 암호 등)가 제공되었으며, 이를 사용함으로써 SSL 라이브러리에서 오류가 발생했습니다. |
QAbstractSocket::TemporaryError | 22 | 일시적인 오류가 발생했습니다(예: 작업이 차단되고 소켓이 비차단 상태인 경우). |
QAbstractSocket::UnknownSocketError | -1 | 알 수 없는 오류가 발생했습니다. |
QAbstractSocket::error() 및 QAbstractSocket::errorOccurred()도 참조하십시오 .
enum QAbstractSocket::SocketOption
이 열거형은 소켓에 설정할 수 있는 옵션을 나타냅니다. 원하는 경우, 소켓으로부터 ` connected()` 신호를 수신한 후나 ` QTcpServer`를 통해 새로운 소켓을 받은 후에 이 옵션을 설정할 수 있습니다.
| 상수 | 값 | 설명 |
|---|---|---|
QAbstractSocket::LowDelayOption | 0 | 저지연에 최적화되도록 소켓을 설정합니다. QTcpSocket 의 경우, 이 설정은 TCP_NODELAY 옵션을 설정하고 Nagle 알고리즘을 비활성화합니다. 활성화하려면 이 값을 1로 설정하십시오. |
QAbstractSocket::KeepAliveOption | 1 | SO_KEEPALIVE 소켓 옵션을 활성화하려면 이 값을 1로 설정하십시오. |
QAbstractSocket::MulticastTtlOption | 2 | 이 값을 정수 값으로 설정하여 IP_MULTICAST_TTL(멀티캐스트 데이터그램의 TTL) 소켓 옵션을 설정합니다. |
QAbstractSocket::MulticastLoopbackOption | 3 | 이 값을 1로 설정하면 IP_MULTICAST_LOOP(멀티캐스트 루프백) 소켓 옵션이 활성화됩니다. |
QAbstractSocket::TypeOfServiceOption | 4 | 이 옵션은 Windows에서는 지원되지 않습니다. 이 옵션은 IP_TOS 소켓 옵션에 매핑됩니다. 가능한 값에 대해서는 아래 표를 참조하십시오. |
QAbstractSocket::SendBufferSizeSocketOption | 5 | OS 수준에서 소켓 전송 버퍼 크기를 바이트 단위로 설정합니다. 이는 SO_SNDBUF 소켓 옵션에 매핑됩니다. 이 옵션은 QIODevice 또는 QAbstractSocket 버퍼에는 영향을 미치지 않습니다. 이 열거형 값은 Qt 5.3에서 도입되었습니다. |
QAbstractSocket::ReceiveBufferSizeSocketOption | 6 | OS 수준에서 소켓 수신 버퍼 크기를 바이트 단위로 설정합니다. 이는 SO_RCVBUF 소켓 옵션에 해당합니다. 이 옵션은 QIODevice 또는 QAbstractSocket 버퍼에는 영향을 미치지 않습니다( setReadBufferSize() 참조). 이 열거형 값은 Qt 5.3에서 도입되었습니다. |
QAbstractSocket::PathMtuSocketOption | 7 | IP 스택이 현재 파악하고 있는 경로 최대 전송 단위(PMTU) 값이 있는 경우 이를 가져옵니다. 일부 IP 스택에서는 전송용 MTU를 설정할 수도 있습니다. 이 열거형 값은 Qt 5.11에서 도입되었습니다. |
QAbstractSocket::KeepAliveIdleOption | 8 | KeepAliveOption이 활성화된 경우, TCP가 keepalive 프로브 전송을 시작하기 전에 연결이 유휴 상태로 유지되어야 하는 시간(초 단위). 이 열거형 값은 Qt 6.11에서 도입되었습니다. |
QAbstractSocket::KeepAliveIntervalOption | 9 | KeepAliveOption이 활성화된 경우, 개별 키프얼라이브(keepalive) 프로브 간 간격(초 단위)입니다. 이 옵션은 모든 OS에서 지원되지는 않습니다. 이 열거형 값은 Qt 6.11에서 도입되었습니다. |
QAbstractSocket::KeepAliveCountOption | 10 | KeepAliveOption이 활성화된 경우, TCP가 연결을 끊기 전에 전송할 수 있는 키프얼라이브 프로브의 최대 개수입니다. 이 옵션은 모든 OS에서 지원되는 것은 아닙니다. 이 열거형 값은 Qt 6.11에서 도입되었습니다. |
TypeOfServiceOption 의 가능한 값은 다음과 같습니다:
| 값 | 설명 |
|---|---|
| 224 | 네트워크 제어 |
| 192 | 인터넷워크 제어 |
| 160 | CRITIC/ECP |
| 128 | 플래시 오버라이드 |
| 96 | 플래시 |
| 64 | 즉시 |
| 32 | 우선순위 |
| 0 | 정기 |
QAbstractSocket::setSocketOption() 및 QAbstractSocket::socketOption()도 참조하십시오 .
enum QAbstractSocket::SocketState
이 열거형은 소켓이 가질 수 있는 다양한 상태를 설명합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QAbstractSocket::UnconnectedState | 0 | 소켓이 연결되어 있지 않습니다. |
QAbstractSocket::HostLookupState | 1 | 소켓이 호스트 이름 조회를 수행 중입니다. |
QAbstractSocket::ConnectingState | 2 | 소켓이 연결 설정을 시작했습니다. |
QAbstractSocket::ConnectedState | 3 | 연결이 설정되었습니다. |
QAbstractSocket::BoundState | 4 | 소켓이 주소와 포트에 바인딩되었습니다. |
QAbstractSocket::ClosingState | 6 | 소켓이 닫히려고 합니다(아직 쓰기 대기 중인 데이터가 있을 수 있음). |
QAbstractSocket::ListeningState | 5 | 내부 용도로만 사용됩니다. |
QAbstractSocket::state()도 참조하십시오 .
enum QAbstractSocket::SocketType
이 열거형은 전송 계층 프로토콜을 설명합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QAbstractSocket::TcpSocket | 0 | TCP |
QAbstractSocket::UdpSocket | 1 | UDP |
QAbstractSocket::SctpSocket | 2 | SCTP |
QAbstractSocket::UnknownSocketType | -1 | TCP, UDP 및 SCTP 이외의 프로토콜 |
QAbstractSocket::socketType()도 참조하십시오 .
멤버 함수 문서
QAbstractSocket::QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)
socketType 유형의 새로운 추상 소켓을 생성합니다. parent 인수는 QObject 의 생성자에 전달됩니다.
socketType(), QTcpSocket 및 QUdpSocket도 참조하십시오 .
[virtual noexcept] QAbstractSocket::~QAbstractSocket()
소켓을 삭제합니다.
void QAbstractSocket::abort()
현재 연결을 종료하고 소켓을 초기화합니다. ` disconnectFromHost()`와 달리, 이 함수는 소켓을 즉시 닫으며 쓰기 버퍼에 남아 있는 모든 데이터를 버립니다.
disconnectFromHost() 및 close()도 참조하십시오 .
[virtual] bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
BindMode ( mode)를 사용하여 포트 port 에서 address 에 바인딩합니다.
UDP 소켓의 경우, 바인딩 후 지정된 주소와 포트에 UDP 데이터그램이 도착할 때마다 QUdpSocket::readyRead() 신호가 발생합니다. 따라서 이 함수는 UDP 서버를 작성하는 데 유용합니다.
TCP 소켓의 경우, 이 함수를 사용하여 발신 연결에 사용할 인터페이스를 지정할 수 있으며, 이는 여러 네트워크 인터페이스가 있는 경우에 유용합니다.
기본적으로 소켓은 DefaultForPlatform BindMode 를 사용하여 바인딩됩니다. 포트가 지정되지 않으면 임의의 포트가 선택됩니다.
성공하면 이 함수는 ` true `를 반환하고 소켓은 ` BoundState` 상태가 되며, 그렇지 않으면 ` false`를 반환합니다.
bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
BindMode ( mode)을 사용하여, 포트 port 에 QHostAddress:Any를 바인딩합니다.
기본적으로 소켓은 DefaultForPlatform BindMode 를 사용하여 바인딩됩니다. 포트가 지정되지 않은 경우 임의의 포트가 선택됩니다.
이 함수는 오버로딩된 함수입니다.
[since 6.2] bool QAbstractSocket::bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
BindMode ( mode)를 사용하여 포트 port 에서 특수 주소 addr 에 바인딩합니다.
기본적으로 소켓은 DefaultForPlatform BindMode 를 사용하여 바인딩됩니다. 포트가 지정되지 않은 경우 임의의 포트가 선택됩니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.2에서 도입되었습니다.
[override virtual] qint64 QAbstractSocket::bytesAvailable() const
QIODevice::bytesAvailable() const를 재구현합니다.
읽기를 기다리고 있는 수신 바이트의 개수를 반환합니다.
bytesToWrite() 및 read()도 참조하십시오 .
[override virtual] qint64 QAbstractSocket::bytesToWrite() const
QIODevice::bytesToWrite() const를 재구현합니다.
쓰기 대기 중인 바이트 수를 반환합니다. 이 바이트들은 제어권이 이벤트 루프로 돌아가거나 flush()이 호출될 때 기록됩니다.
bytesAvailable() 및 flush()도 참조하십시오 .
[override virtual] void QAbstractSocket::close()
QIODevice::close()를 재구현합니다.
소켓에 대한 I/O 장치를 닫고, disconnectFromHost()를 호출하여 소켓의 연결을 종료합니다.
I/O 장치가 닫힐 때 발생하는 동작에 대한 설명은 QIODevice::close()을 참조하십시오.
abort()도 참조하십시오 .
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
지정된 port 에서 hostName 에 연결을 시도합니다. protocol 매개변수를 사용하여 사용할 네트워크 프로토콜(예: IPv4 또는 IPv6)을 지정할 수 있습니다.
소켓은 지정된 openMode 에서 열리고, 먼저 HostLookupState 로 진입한 다음 hostName 에 대한 호스트 이름 조회를 수행합니다. 조회가 성공하면 hostFound()가 발생하고, QAbstractSocket 는 ConnectingState 로 진입합니다. 그런 다음 조회를 통해 반환된 주소 하나 또는 여러 개에 연결을 시도합니다. 마지막으로, 연결이 설정되면 QAbstractSocket 는 ConnectedState 로 진입하여 connected()를 발생시킵니다.
어떤 시점에서든 소켓은 오류가 발생했음을 알리기 위해 errorOccurred()를 반환할 수 있습니다.
hostName 는 문자열 형식의 IP 주소(예: "43.195.83.32")이거나 호스트 이름(예: "example.com")일 수 있습니다. QAbstractSocket 는 필요한 경우에만 조회를 수행합니다. port 는 네이티브 바이트 순서로 되어 있습니다.
state(), peerName(), peerAddress(), peerPort() 및 waitForConnected()도 참조하십시오 .
void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
포트 port 에서 address 에 연결을 시도합니다.
이는 오버로드된 함수입니다.
[signal] void QAbstractSocket::connected()
이 신호는 connectToHost() 함수가 호출되고 연결이 성공적으로 설정된 후에 발생합니다.
참고: 일부 운영체제에서는 로컬호스트에 대한 연결의 경우, ` connectToHost()` 호출 시 `connected()` 신호가 직접 발생될 수 있습니다.
connectToHost() 및 disconnected()도 참조하십시오 .
[virtual] void QAbstractSocket::disconnectFromHost()
소켓을 닫으려고 시도합니다. 쓰기 대기 중인 데이터가 있는 경우, ` QAbstractSocket `는 ` ClosingState ` 상태로 진입하여 모든 데이터가 쓰여질 때까지 대기합니다. 결국 ` UnconnectedState ` 상태로 진입하여 ` disconnected()` 신호를 발생시킵니다.
connectToHost()도 참조하십시오 .
[signal] void QAbstractSocket::disconnected()
이 신호는 소켓 연결이 끊어졌을 때 발생합니다.
경고: 이 신호에 연결된 슬롯에서 sender()를 삭제해야 하는경우 , deleteLater() 함수를 사용하십시오.
connectToHost(), disconnectFromHost(), abort()도 참조하십시오 .
QAbstractSocket::SocketError QAbstractSocket::error() const
마지막으로 발생한 오류의 유형을 반환합니다.
state() 및 errorString()도 참조하십시오 .
[signal] void QAbstractSocket::errorOccurred(QAbstractSocket::SocketError socketError)
이 신호는 오류가 발생한 후에 발생합니다. ` socketError ` 매개변수는 발생한 오류의 유형을 나타냅니다.
이 신호가 발생하면 소켓이 재연결 시도를 할 준비가 되어 있지 않을 수 있습니다. 이 경우, 이벤트 루프에서 재연결 시도를 수행해야 합니다. 예를 들어, 타임아웃을 0ns로 설정하여 QChronoTimer::singleShot()을 사용하십시오.
QAbstractSocket::SocketError 는 등록된 메타타입이 아니므로, 큐에 등록된 연결의 경우 Q_DECLARE_METATYPE() 및 qRegisterMetaType()을 사용하여 이를 등록해야 합니다.
error(), errorString() 및 사용자 정의 Qt 유형 만들기도참조하십시오 .
bool QAbstractSocket::flush()
이 함수는 차단 없이 내부 쓰기 버퍼의 데이터를 가능한 한 많이 기본 네트워크 소켓으로 전송합니다. 데이터가 전송된 경우, 이 함수는 ` true`을 반환하고, 그렇지 않으면 `false`를 반환합니다.
QAbstractSocket 가 버퍼된 데이터를 즉시 전송하기 시작해야 할 경우 이 함수를 호출하십시오. 성공적으로 쓰여진 바이트 수는 운영 체제에 따라 다릅니다. 대부분의 경우, 제어권이 이벤트 루프로 돌아가면 QAbstractSocket 가 자동으로 데이터 전송을 시작하므로 이 함수를 호출할 필요가 없습니다. 이벤트 루프가 없는 경우에는 대신 waitForBytesWritten()를 호출하십시오.
write() 및 waitForBytesWritten()도 참조하십시오 .
[signal] void QAbstractSocket::hostFound()
이 신호는 connectToHost()이 호출되고 호스트 조회가 성공한 후에 발생합니다.
참고: Qt 4.6.3부터는 DNS 결과가 캐시되어 있을 수 있으므로, ` QAbstractSocket `가 ` connectToHost()` 호출 시 직접 `hostFound()`를 발생시킬 수 있습니다.
connected()도 참조하십시오 .
[override virtual] bool QAbstractSocket::isSequential() const
QIODevice::isSequential() const를 재구현합니다.
bool QAbstractSocket::isValid() const
소켓이 유효하고 사용 준비가 되어 있으면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다.
참고: 읽기 및 쓰기 작업이 이루어지기 전에 소켓의상태가 ConnectedState 이어야 합니다.
state()도 참조하십시오 .
QHostAddress QAbstractSocket::localAddress() const
사용 가능한 경우 로컬 소켓의 호스트 주소를 반환하고, 그렇지 않으면 QHostAddress::Null 을 반환합니다.
이는 일반적으로 호스트의 주 IP 주소이지만, 로컬 호스트에 대한 연결의 경우 QHostAddress::LocalHost (127.0.0.1)일 수 있습니다.
localPort(), peerAddress(), setLocalAddress()도 참조하십시오 .
quint16 QAbstractSocket::localPort() const
사용 가능한 경우 로컬 소켓의 호스트 포트 번호(네이티브 바이트 순서)를 반환하고, 그렇지 않으면 0을 반환합니다.
localAddress(), peerPort(), setLocalPort()도 참조하십시오 .
QAbstractSocket::PauseModes QAbstractSocket::pauseMode() const
이 소켓의 일시 중지 모드를 반환합니다.
setPauseMode() 및 resume()도 참조하십시오 .
QHostAddress QAbstractSocket::peerAddress() const
소켓이 ConnectedState 상태인 경우 연결된 피어의 주소를 반환하고, 그렇지 않은 경우 QHostAddress::Null 를 반환합니다.
peerName(), peerPort(), localAddress(), setPeerAddress()도 참조하십시오 .
QString QAbstractSocket::peerName() const
connectToHost()에서 지정된 피어의 이름을 반환하거나, connectToHost()이 호출되지 않은 경우 빈 QString 을 반환합니다.
peerAddress(), peerPort() 및 setPeerName()도 참조하십시오 .
quint16 QAbstractSocket::peerPort() const
소켓이 ConnectedState 상태인 경우 연결된 피어의 포트를 반환하고, 그렇지 않으면 0을 반환합니다.
peerAddress(), localPort(), setPeerPort()도 참조하십시오 .
QString QAbstractSocket::protocolTag() const
이 소켓의 프로토콜 태그를 반환합니다. 프로토콜 태그가 설정되어 있는 경우, 이 소켓이 내부적으로 생성될 때 QNetworkProxyQuery 에 이 값이 전달되어 사용될 프로토콜 태그를 지정합니다.
setProtocolTag() 및 QNetworkProxyQuery도 참조하십시오 .
QNetworkProxy QAbstractSocket::proxy() const
이 소켓에 대한 네트워크 프록시를 반환합니다. 기본적으로 QNetworkProxy::DefaultProxy 이 사용되며, 이는 이 소켓이 애플리케이션의 기본 프록시 설정을 조회함을 의미합니다.
setProxy(), QNetworkProxy 및 QNetworkProxyFactory도 참조하십시오 .
[signal] void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
이 신호는 인증이 필요한 proxy 을 사용할 때 발생될 수 있습니다. 이때 authenticator 객체에 필요한 세부 정보를 입력하여 인증을 완료하고 연결을 계속할 수 있습니다.
참고: 이 신호에 연결할 때 QueuedConnection을 사용할수 없습니다 . 신호가 반환될 때 인증기에 새로운 정보가 입력되어 있지 않으면 연결이 실패하기 때문입니다.
QAuthenticator 및 QNetworkProxy도 참조하십시오 .
qint64 QAbstractSocket::readBufferSize() const
내부 읽기 버퍼의 크기를 반환합니다. 이 값은 ` read()` 또는 ` readAll()`를 호출하기 전에 클라이언트가 수신할 수 있는 데이터의 양을 제한합니다.
읽기 버퍼 크기가 0(기본값)인 경우 버퍼에 크기 제한이 없으므로 데이터가 손실되지 않습니다.
setReadBufferSize() 및 read()도 참조하십시오 .
[override virtual protected] qint64 QAbstractSocket::readData(char *data, qint64 maxSize)
QIODevice::readData(char *data, qint64 maxSize)를 재구현합니다.
[override virtual protected] qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)
QIODevice::readLineData(char *data, qint64 maxSize)를 재구현합니다.
[virtual] void QAbstractSocket::resume()
소켓에서 데이터 전송을 계속합니다. 이 메서드는 소켓이 알림 수신 시 일시 중지되도록 설정된 후, 알림을 수신한 경우에만 사용해야 합니다. 현재 지원되는 유일한 알림은 QSslSocket::sslErrors()입니다. 소켓이 일시 중지 상태가 아닌 상태에서 이 메서드를 호출하면 정의되지 않은 동작이 발생합니다.
pauseMode() 및 setPauseMode()도 참조하십시오 .
[protected] void QAbstractSocket::setLocalAddress(const QHostAddress &address)
연결의 로컬 측 주소를 ` address`로 설정합니다.
QAbstractSocket 의 서브클래스에서 이 함수를 호출하여, 연결이 수립된 후 localAddress() 함수의 반환값을 변경할 수 있습니다. 이 기능은 가상 연결 설정을 위한 프록시 연결에서 일반적으로 사용됩니다.
이 함수는 연결이 수립되기 전(예: QAbstractSocket::bind())에는 소켓의 로컬 주소를 바인딩하지 않는다는 점에 유의하십시오.
localAddress(), setLocalPort(), setPeerAddress()도 참조하십시오 .
[protected] void QAbstractSocket::setLocalPort(quint16 port)
연결의 로컬 측 포트를 port 로 설정합니다.
QAbstractSocket 의 하위 클래스에서 이 함수를 호출하여, 연결이 수립된 후 localPort() 함수의 반환값을 변경할 수 있습니다. 이 기능은 가상 연결 설정을 위한 프록시 연결에서 흔히 사용됩니다.
이 함수는 연결(예: ` QAbstractSocket::bind()`)이 수립되기 전에 소켓의 로컬 포트를 바인딩하지는 않는다는 점에 유의하십시오.
localPort(), localAddress(), setLocalAddress(), setPeerPort()함수도 참조하십시오 .
void QAbstractSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)
알림을 수신했을 때 일시 중지할지 여부를 제어합니다. ` pauseMode ` 매개변수는 소켓이 일시 중지되어야 하는 조건을 지정합니다. 현재 지원되는 유일한 알림은 ` QSslSocket::sslErrors()`입니다. 이 옵션을 ` PauseOnSslErrors`로 설정하면 소켓의 데이터 전송이 일시 중지되며, ` resume()`를 호출하여 명시적으로 다시 활성화해야 합니다. 기본적으로 이 옵션은 ` PauseNever`로 설정되어 있습니다. 이 옵션은 서버에 연결하기 전에 호출해야 하며, 그렇지 않으면 정의되지 않은 동작이 발생합니다.
pauseMode() 및 resume()도 참조하십시오 .
[protected] void QAbstractSocket::setPeerAddress(const QHostAddress &address)
연결의 원격 측 주소를 address 로 설정합니다.
QAbstractSocket 의 하위 클래스에서 이 함수를 호출하여, 연결이 설정된 후 peerAddress() 함수의 반환 값을 변경할 수 있습니다. 이 기능은 가상 연결 설정을 위한 프록시 연결에서 흔히 사용됩니다.
peerAddress(), setPeerPort(), setLocalAddress()도 참조하십시오 .
[protected] void QAbstractSocket::setPeerName(const QString &name)
원격 피어의 호스트 이름을 name 로 설정합니다.
QAbstractSocket 의 서브클래스에서 이 함수를 호출하여, 연결이 수립된 후 peerName() 함수의 반환 값을 변경할 수 있습니다. 이 기능은 가상 연결 설정을 위한 프록시 연결에서 흔히 사용됩니다.
peerName()도 참조하십시오 .
[protected] void QAbstractSocket::setPeerPort(quint16 port)
연결의 원격 측 포트를 port 로 설정합니다.
QAbstractSocket 의 서브클래스에서 이 함수를 호출하여, 연결이 설정된 후 peerPort() 함수의 반환값을 변경할 수 있습니다. 이 기능은 가상 연결 설정을 위한 프록시 연결에서 흔히 사용됩니다.
peerPort(), setPeerAddress() 및 setLocalPort()도 참조하십시오 .
void QAbstractSocket::setProtocolTag(const QString &tag)
이 소켓의 프로토콜 태그를 tag 로 설정합니다.
protocolTag()도 참조하십시오 .
void QAbstractSocket::setProxy(const QNetworkProxy &networkProxy)
이 소켓에 대한 명시적 네트워크 프록시를 networkProxy 로 설정합니다.
이 소켓에서 프록시 사용을 비활성화하려면 QNetworkProxy::NoProxy 프록시 유형을 사용하십시오:
socket->setProxy(QNetworkProxy::NoProxy);프록시의 기본값은 QNetworkProxy::DefaultProxy 이며, 이는 소켓이 애플리케이션 설정을 사용함을 의미합니다. 즉, QNetworkProxy::setApplicationProxy 로 프록시가 설정된 경우 해당 프록시를 사용하며, 그렇지 않은 경우 QNetworkProxyFactory::setApplicationProxyFactory 로 팩토리가 설정된 경우 QNetworkProxyQuery::TcpSocket 유형으로 해당 팩토리에 쿼리를 보냅니다.
proxy(), QNetworkProxy 및 QNetworkProxyFactory::queryProxy()도 참조하십시오 .
[virtual] void QAbstractSocket::setReadBufferSize(qint64 size)
QAbstractSocket 의 내부 읽기 버퍼 크기를 size 바이트로 설정합니다.
버퍼 크기가 특정 크기로 제한된 경우, ` QAbstractSocket `는 이 크기 이상의 데이터를 버퍼링하지 않습니다. 단, 버퍼 크기가 0인 경우는 예외로, 읽기 버퍼에 제한이 없으며 들어오는 모든 데이터가 버퍼링됩니다. 이것이 기본값입니다.
이 옵션은 특정 시점(예: 실시간 스트리밍 애플리케이션)에만 데이터를 읽거나, 소켓이 과도한 데이터를 수신하여 결국 애플리케이션의 메모리가 부족해지는 것을 방지하려는 경우에 유용합니다.
QTcpSocket 만이 QAbstractSocket 의 내부 버퍼를 사용하며, QUdpSocket 는 버퍼링을 전혀 사용하지 않고 운영 체제가 제공하는 암시적 버퍼링에 의존합니다. 이 때문에 QUdpSocket 에서 이 함수를 호출해도 아무런 효과가 없습니다.
readBufferSize() 및 read()도 참조하십시오 .
[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
네이티브 소켓 디스크립터 ` socketDescriptor`를 사용하여 ` QAbstractSocket `를 초기화합니다. ` socketDescriptor `가 유효한 소켓 디스크립터로 인정되면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다. 소켓은 ` openMode`로 지정된 모드로 열리며, ` socketState`로 지정된 소켓 상태로 진입합니다. 읽기 및 쓰기 버퍼는 지워지며, 대기 중인 데이터는 모두 폐기됩니다.
참고: 동일한 네이티브 소켓 디스크립터로 두 개의 추상 소켓을 초기화할 수는 없습니다.
socketDescriptor()도 참조하십시오 .
[protected] void QAbstractSocket::setSocketError(QAbstractSocket::SocketError socketError)
마지막으로 발생한 오류의 유형을 ` socketError`로 설정합니다.
setSocketState() 및 setErrorString()도 참조하십시오 .
[virtual] void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
지정된 option 에 value 에 설명된 값을 설정합니다.
socketOption()도 참조하십시오 .
[protected] void QAbstractSocket::setSocketState(QAbstractSocket::SocketState state)
소켓의 상태를 ` state`로 설정합니다.
state()도 참조하십시오 .
[override virtual protected] qint64 QAbstractSocket::skipData(qint64 maxSize)
QIODevice::skipData(qint64 maxSize)를 재구현합니다.
[virtual] qintptr QAbstractSocket::socketDescriptor() const
QAbstractSocket 객체의 네이티브 소켓 디스크립터가 있는 경우 이를 반환하고, 그렇지 않으면 -1을 반환합니다.
소켓이 ` QNetworkProxy`를 사용하고 있는 경우, 반환된 디스크립터는 네이티브 소켓 함수와 함께 사용할 수 없을 수도 있습니다.
QAbstractSocket 가 UnconnectedState 상태일 때는 소켓 디스크립터를 사용할 수 없습니다.
setSocketDescriptor()도 참조하십시오 .
[virtual] QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)
option 옵션의 값을 반환합니다.
setSocketOption()도 참조하십시오 .
QAbstractSocket::SocketType QAbstractSocket::socketType() const
소켓 유형(TCP, UDP 또는 기타)을 반환합니다.
QTcpSocket 및 QUdpSocket도 참조하십시오 .
QAbstractSocket::SocketState QAbstractSocket::state() const
소켓의 상태를 반환합니다.
error()도 참조하십시오 .
[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
이 신호는 QAbstractSocket 의 상태가 변경될 때마다 발생합니다. socketState 매개변수는 새로운 상태를 나타냅니다.
QAbstractSocket::SocketState 는 등록된 메타타입이 아니므로, 큐에 등록된 연결의 경우 Q_DECLARE_METATYPE() 및 qRegisterMetaType()를 통해 이를 등록해야 합니다.
state() 및 사용자 정의 Qt 유형 만들기도참조하십시오 .
[override virtual] bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)
QIODevice::waitForBytesWritten(int msecs)를 재구현합니다.
이 함수는 소켓에 최소 1바이트가 기록되고 bytesWritten() 신호가 발생될 때까지 대기합니다. 이 함수는 msecs 밀리초 후에 타임아웃되며, 기본 타임아웃 시간은 30000 밀리초입니다.
bytesWritten() 신호가 발생하면 이 함수는 true 을 반환하고, 그렇지 않은 경우(오류가 발생했거나 작업이 타임아웃된 경우) false 을 반환합니다.
참고: 이 함수는 Windows에서 무작위로 실패할 수 있습니다. 소프트웨어가 Windows에서 실행될 예정이라면 이벤트 루프와 bytesWritten() 신호를 사용하는 것을 고려하십시오.
참조: waitForReadyRead().
[virtual] bool QAbstractSocket::waitForConnected(int msecs = 30000)
소켓이 연결될 때까지 최대 msecs 밀리초 동안 대기합니다. 연결이 설정된 경우, 이 함수는 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다. false 를 반환하는 경우, error()를 호출하여 오류의 원인을 확인할 수 있습니다.
다음 예제는 연결이 설정될 때까지 최대 1초 동안 대기합니다:
socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
qDebug("Connected!");msecs가 -1인 경우, 이 함수는 타임아웃되지 않습니다.
참고: 이 함수는 호스트 조회 완료에 걸리는 시간에 따라 msecs 보다 약간 더 오래 대기할 수 있습니다.
참고: 이 함수를여러 번 호출해도 시간이 누적되지는 않습니다. 함수가 타임아웃되면 연결 프로세스가 중단됩니다.
참고: 이 함수는 Windows에서 무작위로 실패할 수 있습니다. 소프트웨어가 Windows에서 실행될 경우, 이벤트 루프와 connected() 신호를 사용하는 것을 고려하십시오.
참조: connectToHost() 및 connected().
[virtual] bool QAbstractSocket::waitForDisconnected(int msecs = 30000)
소켓 연결이 끊어질 때까지 최대 msecs 밀리초 동안 대기합니다. 연결이 성공적으로 끊어진 경우, 이 함수는 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다(작업이 시간 초과되었거나, 오류가 발생했거나, 해당 QAbstractSocket 가 이미 연결이 끊어진 경우). false 가 반환되는 경우, error()를 호출하여 오류 원인을 확인할 수 있습니다.
다음 예제는 연결이 종료될 때까지 최대 1초 동안 대기합니다:
socket->disconnectFromHost();
if (socket->state()== QAbstractSocket::UnconnectedState
|| socket->waitForDisconnected(1000)) {
qDebug("Disconnected!");
}msecs가 -1인 경우, 이 함수는 시간 초과되지 않습니다.
참고: 이 함수는 Windows에서 무작위로 실패할 수 있습니다. 소프트웨어가 Windows에서 실행될 경우, 이벤트 루프와 disconnected() 신호를 사용하는 것을 고려해 보십시오.
disconnectFromHost() 및 close()도 참조하십시오 .
[override virtual] bool QAbstractSocket::waitForReadyRead(int msecs = 30000)
QIODevice::waitForReadyRead(int msecs)를 재구현합니다.
이 함수는 읽을 수 있는 새로운 데이터가 준비되고 readyRead() 신호가 발신될 때까지 대기합니다. 이 함수는 msecs 밀리초 후에 타임아웃되며, 기본 타임아웃 시간은 30000 밀리초입니다.
readyRead() 신호가 발생하고 읽을 수 있는 새 데이터가 있는 경우 이 함수는 true 를 반환하며, 그렇지 않은 경우(오류가 발생했거나 작업이 타임아웃된 경우) false 를 반환합니다.
참고: 이 함수는 Windows에서 무작위로 실패할 수 있습니다. 소프트웨어가 Windows에서 실행될 예정이라면 이벤트 루프와 readyRead() 신호를 사용하는 것을 고려하십시오.
참조: waitForBytesWritten().
[override virtual protected] qint64 QAbstractSocket::writeData(const char *data, qint64 size)
QIODevice::writeData(const char *data, qint64 maxSize)를 재구현합니다.
© 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.