QBluetoothSocket Class
QBluetoothSocket 클래스를 사용하면 블루투스 서버를 실행하는 블루투스 장치에 연결할 수 있습니다. 더 보기...
Header: | #include <QBluetoothSocket> |
qmake: | QT += bluetooth |
Inherits: | QIODevice |
공용 유형
enum class | SocketError { UnknownSocketError, NoSocketError, HostNotFoundError, ServiceNotFoundError, NetworkError, …, MissingPermissionsError } |
enum class | SocketState { UnconnectedState, ServiceLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState } |
공용 함수
QBluetoothSocket(QObject *parent = nullptr) | |
QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr) | |
virtual | ~QBluetoothSocket() |
void | abort() |
void | connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite) |
void | connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite) |
void | connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite) |
void | disconnectFromService() |
QBluetoothSocket::SocketError | error() const |
QString | errorString() const |
QBluetoothAddress | localAddress() const |
QString | localName() const |
quint16 | localPort() const |
QBluetoothAddress | peerAddress() const |
QString | peerName() const |
quint16 | peerPort() const |
QBluetooth::SecurityFlags | preferredSecurityFlags() const |
void | setPreferredSecurityFlags(QBluetooth::SecurityFlags flags) |
bool | setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) |
int | socketDescriptor() const |
QBluetoothServiceInfo::Protocol | socketType() const |
QBluetoothSocket::SocketState | state() const |
재구현된 공용 함수
virtual qint64 | bytesAvailable() const override |
virtual qint64 | bytesToWrite() const override |
virtual bool | canReadLine() const override |
virtual void | close() override |
virtual bool | isSequential() const override |
Signals
void | connected() |
void | disconnected() |
(since 6.2) void | errorOccurred(QBluetoothSocket::SocketError error) |
void | stateChanged(QBluetoothSocket::SocketState state) |
보호된 함수
void | doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode) |
void | setSocketError(QBluetoothSocket::SocketError error_) |
void | setSocketState(QBluetoothSocket::SocketState state) |
재구현된 보호 함수
virtual qint64 | readData(char *data, qint64 maxSize) override |
virtual qint64 | writeData(const char *data, qint64 maxSize) override |
상세 설명
QBluetoothSocket은 L2CAP 와 RFCOMM 의 두 가지 소켓 유형을 지원합니다.
L2CAP 는 로우 레벨 데이터그램 지향 블루투스 소켓입니다. 안드로이드는 소켓 연결에 L2CAP 을 지원하지 않습니다.
RFCOMM 는 안정적인 스트림 지향 소켓입니다. RFCOMM 소켓은 RS-232 직렬 포트를 에뮬레이트합니다.
블루투스 서비스에 대한 연결을 만들려면 적절한 유형의 소켓을 만들고 블루투스 주소와 포트 번호를 전달하여 connectToService()를 호출합니다. 연결이 설정되면 QBluetoothSocket이 connected() 신호를 보냅니다.
플랫폼에서 Protocol 가 지원되지 않는 경우 connectToService()을 호출하면 UnsupportedProtocolError 오류가 발생합니다.
참고: QBluetoothSocket은 동기식 읽기 및 쓰기 작업을 지원하지 않습니다. waitForReadyRead () 및 waitForBytesWritten()와 같은 함수는 구현되지 않습니다. I/O 작업은 readyRead(), read() 및 write()를 사용하여 수행해야 합니다.
iOS에서는 플랫폼이 QBluetoothSocket 관련 기능에 액세스할 수 있는 API를 노출하지 않기 때문에 이 클래스를 사용할 수 없습니다.
참고: macOS Monterey(12)에서는 모달 대화 상자가 실행 중이거나 이벤트 추적 모드에 들어가면(예: 창 닫기 버튼을 길게 누름) 소켓 데이터 흐름이 일시 중지됩니다. 이는 향후 macOS 릴리스에서 변경될 수 있습니다.
멤버 유형 문서
enum class QBluetoothSocket::SocketError
이 열거형은 블루투스 소켓 오류 유형을 설명합니다.
Constant | 값 | 설명 |
---|---|---|
QBluetoothSocket::SocketError::UnknownSocketError | 1 | 알 수 없는 오류가 발생했습니다. |
QBluetoothSocket::SocketError::NoSocketError | 0 | 오류 없음. 테스트에 사용됩니다. |
QBluetoothSocket::SocketError::HostNotFoundError | 3 | 원격 호스트를 찾을 수 없습니다. |
QBluetoothSocket::SocketError::ServiceNotFoundError | 4 | 원격 호스트에서 서비스 UUID를 찾을 수 없습니다. |
QBluetoothSocket::SocketError::NetworkError | 5 | 소켓에서 읽기 또는 쓰기를 시도하는 동안 오류가 반환되었습니다. |
QBluetoothSocket::SocketError::UnsupportedProtocolError | 6 | Protocol 은 이 플랫폼에서 지원되지 않습니다. |
QBluetoothSocket::SocketError::OperationError | 7 | 소켓이 허용되지 않는 상태인 동안 작업을 시도했습니다. |
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10) | 2 | 원격 호스트가 연결을 닫았습니다. |
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4) | 8 | 운영 체제에서 사용자가 부여하지 않은 권한을 요청합니다. |
enum class QBluetoothSocket::SocketState
이 열거형은 블루투스 소켓의 상태를 설명합니다.
Constant | 값 | 설명 |
---|---|---|
QBluetoothSocket::SocketState::UnconnectedState | 0 | 소켓이 연결되지 않았습니다. |
QBluetoothSocket::SocketState::ServiceLookupState | 1 | 소켓이 연결 매개 변수를 쿼리 중입니다. |
QBluetoothSocket::SocketState::ConnectingState | 2 | 소켓이 장치에 연결을 시도하고 있습니다. |
QBluetoothSocket::SocketState::ConnectedState | 3 | 소켓이 장치에 연결되었습니다. |
QBluetoothSocket::SocketState::BoundState | 4 | 소켓이 로컬 주소 및 포트에 바인딩되었습니다. |
QBluetoothSocket::SocketState::ClosingState | 5 | 소켓이 연결되었으며 보류 중인 모든 데이터가 소켓에 쓰여지면 닫힙니다. |
QBluetoothSocket::SocketState::ListeningState | 6 | 소켓이 들어오는 연결을 수신 대기 중입니다. |
멤버 함수 문서
[explicit]
QBluetoothSocket::QBluetoothSocket(QObject *parent = nullptr)
parent 로 블루투스 소켓을 구성합니다.
[explicit]
QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)
parent 을 사용하여 socketType 유형의 블루투스 소켓을 구축합니다.
[virtual noexcept]
QBluetoothSocket::~QBluetoothSocket()
블루투스 소켓을 파괴합니다.
void QBluetoothSocket::abort()
현재 연결을 중단하고 소켓을 재설정합니다. disconnectFromService ()와 달리 이 함수는 즉시 소켓을 닫고 쓰기 버퍼에 보류 중인 데이터를 모두 삭제합니다.
참고: 안드로이드에서 소켓을 중단하려면 안드로이드 스레드와의 비동기 상호작용이 필요합니다. 따라서 관련된 disconnected() 및 stateChanged() 신호는 스레드가 종료를 완료할 때까지 지연됩니다.
disconnectFromService() 및 close()도 참조하세요 .
[override virtual]
qint64 QBluetoothSocket::bytesAvailable() const
재구현합니다: QIODevice::bytesAvailable() const.
읽기를 기다리는 수신 바이트 수를 반환합니다.
bytesToWrite() 및 read()도 참조하세요 .
[override virtual]
qint64 QBluetoothSocket::bytesToWrite() const
재구현합니다: QIODevice::bytesToWrite() const.
쓰기를 기다리는 바이트 수를 반환합니다. 바이트는 제어가 이벤트 루프로 돌아갈 때 기록됩니다.
[override virtual]
bool QBluetoothSocket::canReadLine() const
재구현합니다: QIODevice::canReadLine() const.
장치에서 적어도 한 줄을 읽을 수 있으면 참을 반환합니다.
[override virtual]
void QBluetoothSocket::close()
다시 구현합니다: QIODevice::close().
장치와의 소켓 연결을 끊습니다.
참고: 안드로이드에서 소켓을 닫으려면 안드로이드 스레드와의 비동기 상호작용이 필요합니다. 따라서 연결된 disconnected() 및 stateChanged() 신호는 스레드가 종료를 완료할 때까지 지연됩니다.
void QBluetoothSocket::connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite)
service 에 설명된 서비스에 연결을 시도합니다.
주어진 openMode 에서 소켓이 열립니다. service 이 다른 QBluetoothServiceInfo::socketProtocol()를 지정하면 socketType()는 무시됩니다.
소켓은 먼저 ConnectingState 으로 들어가 service 을 제공하는 장치에 연결을 시도합니다. 연결이 설정되면 QBluetoothSocket 은 ConnectedState 을 입력하고 connected()를 내보냅니다.
언제든지 소켓은 errorOccurred()를 전송하여 오류가 발생했음을 알릴 수 있습니다.
대부분의 플랫폼에서는 원격 장치에 연결하기 전에 페어링을 해야 한다는 점에 유의하세요. 그렇지 않으면 연결 프로세스가 실패할 수 있습니다.
Android에서는 RFCOMM 연결만 가능합니다. 이 함수는 모든 소켓 프로토콜 표시기를 무시하고 RFCOMM을 가정합니다.
state() 및 disconnectFromService()도 참조하세요 .
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite)
주소가 address 인 장치에서 uuid 으로 식별되는 서비스에 연결을 시도합니다.
소켓은 주어진 openMode 에서 열립니다.
BlueZ의 경우, 소켓은 먼저 ServiceLookupState 에 들어가 uuid 에 대한 연결 파라미터를 쿼리합니다. 서비스 매개변수가 성공적으로 검색되면 소켓은 ConnectingState 으로 들어가 address 에 연결을 시도합니다. 연결이 성립되면 QBluetoothSocket 는 ConnectedState 으로 들어가 connected()를 전송합니다.
Android에서는 원격 서비스의 UUID를 사용하여 서비스 연결을 직접 설정할 수 있습니다. 따라서 플랫폼에는 ServiceLookupState 및 socketType()가 항상 QBluetoothServiceInfo::RfcommProtocol 로 설정되어 있지 않습니다.
소켓은 언제든지 errorOccurred()를 전송하여 오류가 발생했음을 알릴 수 있습니다.
대부분의 플랫폼에서는 원격 장치에 연결하기 전에 페어링이 필요합니다. 그렇지 않으면 연결 프로세스가 실패할 수 있습니다.
state() 및 disconnectFromService()도 참조하세요 .
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
주어진 port 에서 address 로 연결을 시도합니다.
소켓은 주어진 openMode 에서 열립니다.
소켓은 먼저 ConnectingState 에 들어가 address 에 연결을 시도합니다. 연결이 성립되면 QBluetoothSocket 는 ConnectedState 에 들어가 connected()를 전송합니다.
언제든지 소켓은 errorOccurred()를 전송하여 오류가 발생했음을 알릴 수 있습니다.
Android 및 BlueZ(버전 5.46 이상)에서는 포트를 사용하여 서비스 연결을 설정할 수 없습니다. 이 함수를 호출하면 ServiceNotFoundError.
대부분의 플랫폼에서는 원격 장치에 연결하기 전에 페어링을 해야 한다는 점에 유의하세요. 그렇지 않으면 연결 프로세스가 실패할 수 있습니다.
state() 및 disconnectFromService()도 참조하세요 .
[signal]
void QBluetoothSocket::connected()
이 신호는 연결이 설정될 때 방출됩니다.
QBluetoothSocket::SocketState::ConnectedState 및 stateChanged()도 참조하세요 .
void QBluetoothSocket::disconnectFromService()
소켓을 닫으려고 시도합니다. 쓰기를 기다리는 대기 중인 데이터가 있는 경우 QBluetoothSocket 은 ClosingState 으로 들어가 모든 데이터가 쓰여질 때까지 기다립니다. 결국 UnconnectedState 에 들어가 disconnected() 신호를 내보냅니다.
connectToService()도 참조하세요 .
[signal]
void QBluetoothSocket::disconnected()
이 신호는 소켓이 분리될 때 방출됩니다.
QBluetoothSocket::SocketState::UnconnectedState 및 stateChanged()도 참조하세요 .
[protected]
void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)
service 에 대한 장치 검색을 시작하고 openMode 으로 소켓을 엽니다. 소켓이 서비스 uuid 장치 주소로 생성된 경우 서비스 검색을 사용하여 연결할 포트 번호를 찾습니다.
QBluetoothSocket::SocketError QBluetoothSocket::error() const
마지막 오류를 반환합니다.
[signal, since 6.2]
void QBluetoothSocket::errorOccurred(QBluetoothSocket::SocketError error)
이 신호는 error 발생 시 방출됩니다.
이 함수는 Qt 6.2에 도입되었습니다.
error()도 참조하십시오 .
QString QBluetoothSocket::errorString() const
오류에 대한 사용자 표시 가능 텍스트 문자열을 반환합니다.
[override virtual]
bool QBluetoothSocket::isSequential() const
재구현합니다: QIODevice::isSequential() const.
QBluetoothAddress QBluetoothSocket::localAddress() const
로컬 디바이스의 주소를 반환합니다.
플랫폼에 따라 다를 수 있지만 일반적으로 유효한 주소를 반환하려면 소켓을 연결해야 합니다. 특히 여러 로컬 Bluetooth 어댑터를 지원하는 플랫폼의 경우 더욱 그렇습니다.
QString QBluetoothSocket::localName() const
로컬 디바이스의 이름을 반환합니다.
플랫폼에 따라 다를 수 있지만 일반적으로 유효한 이름을 반환하려면 소켓을 연결해야 합니다. 특히 여러 로컬 Bluetooth 어댑터를 지원하는 플랫폼을 다룰 때는 더욱 그렇습니다.
quint16 QBluetoothSocket::localPort() const
사용 가능한 경우 로컬 소켓의 포트 번호를 반환하고, 그렇지 않으면 0을 반환합니다. 플랫폼에 따라 다를 수 있지만 일반적으로 유효한 포트 번호를 반환하려면 소켓을 연결해야 합니다.
Android 및 macOS에서는 이 기능이 지원되지 않으며 0을 반환합니다.
QBluetoothAddress QBluetoothSocket::peerAddress() const
피어 디바이스의 주소를 반환합니다.
QString QBluetoothSocket::peerName() const
피어 디바이스의 이름을 반환합니다.
quint16 QBluetoothSocket::peerPort() const
사용 가능한 경우 피어 소켓의 포트 번호를 반환하고, 그렇지 않으면 0을 반환합니다. Android에서는 이 기능이 지원되지 않습니다.
QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const
초기 연결 시도에 사용된 보안 매개변수를 반환합니다.
보안 매개변수는 연결이 설정되는 동안 또는 연결이 설정된 후에 두 당사자 간에 재협상될 수 있습니다. 이러한 변경이 발생하면 이 플래그의 값에 반영되지 않습니다.
macOS에서는 이 플래그가 항상 QBluetooth::Security::Secure 로 설정됩니다.
setPreferredSecurityFlags()도 참조하세요 .
[override virtual protected]
qint64 QBluetoothSocket::readData(char *data, qint64 maxSize)
다시 구현합니다: QIODevice::readData(문자 *데이터, qint64 maxSize).
void QBluetoothSocket::setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)
연결 시도에 대한 기본 보안 매개변수를 flags 으로 설정합니다. 이 값은 connectToService()을 호출할 때 통합됩니다. 따라서 기존 연결에 대해 이 매개변수를 변경하려면 다시 연결해야 합니다.
Bluez에서는 이 속성이 기본적으로 QBluetooth::Security::Authorization 로 설정되어 있습니다.
macOS에서는 플랫폼이 소켓의 보안 매개변수에 대한 액세스를 허용하지 않으므로 이 값은 무시됩니다. 하지만 기본적으로 플랫폼은 보안/암호화된 연결을 선호하므로 이 함수는 항상 QBluetooth::Security::Secure 을 반환합니다.
Android는 두 가지 보안 수준(보안 및 비보안)만 지원합니다. 이 플래그가 QBluetooth::Security::NoSecurity 로 설정되면 소켓 객체는 인증이나 암호화를 사용하지 않습니다. 다른 보안 플래그 조합은 보안 Bluetooth 연결을 트리거합니다. 이 플래그는 기본적으로 QBluetooth::Security::Secure 로 설정되어 있습니다.
참고: 보안 연결을 사용하려면 두 디바이스 간에 페어링이 필요합니다. 일부 플랫폼에서는 연결이 설정되는 동안 페어링이 자동으로 시작됩니다. 다른 플랫폼에서는 연결을 시도하기 전에 애플리케이션이 수동으로 페어링을 트리거해야 합니다.
preferredSecurityFlags()도 참조하세요 .
bool QBluetoothSocket::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
소켓이 socketType 유형, socketState 상태, openMode 모드인 socketDescriptor 을 사용하도록 설정합니다.
소켓 설명자는 QBluetoothSocket 인스턴스가 소유하며 완료되면 닫힐 수 있습니다.
성공하면 true
을 반환합니다.
socketDescriptor()도 참조하세요 .
[protected]
void QBluetoothSocket::setSocketError(QBluetoothSocket::SocketError error_)
마지막으로 발생한 오류 유형을 error_ 으로 설정합니다.
[protected]
void QBluetoothSocket::setSocketState(QBluetoothSocket::SocketState state)
소켓 상태를 state 로 설정합니다.
int QBluetoothSocket::socketDescriptor() const
사용 가능한 경우 플랫폼별 소켓 기술자를 반환합니다. 기술자를 사용할 수 없거나 오류가 발생하면 -1을 반환합니다.
setSocketDescriptor()도 참조하세요 .
QBluetoothServiceInfo::Protocol QBluetoothSocket::socketType() const
소켓 유형을 반환합니다. 소켓은 원격 서비스에서 제공하는 프로토콜에 따라 자동으로 조정됩니다.
Android는 RFCOMM 기반 소켓만 지원합니다.
QBluetoothSocket::SocketState QBluetoothSocket::state() const
소켓의 현재 상태를 반환합니다.
[signal]
void QBluetoothSocket::stateChanged(QBluetoothSocket::SocketState state)
이 신호는 소켓 상태가 state 로 변경될 때 발생합니다.
connected(), disconnected(), state() 및 QBluetoothSocket::SocketState도 참조하세요 .
[override virtual protected]
qint64 QBluetoothSocket::writeData(const char *data, qint64 maxSize)
재구현합니다: QIODevice::writeData(const char *data, qint64 maxSize).
© 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.