이 페이지에서

QBluetoothSocket Class

QBluetoothSocket 클래스는 블루투스 서버를 실행 중인 블루투스 장치에 연결할 수 있게 해줍니다. 더 보기...

헤더: #include <QBluetoothSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(mytarget PRIVATE Qt6::Bluetooth)
qmake: QT += bluetooth
상속: 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

신호

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 는 저수준의 데이터그램 지향 블루투스 소켓입니다. Android는 소켓 연결을 위해 를 지원하지 않습니다.

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 Sequoia(15)에서 수정되었습니다.

멤버 유형 문서

enum class QBluetoothSocket::SocketError

이 열거형은 블루투스 소켓 오류 유형을 설명합니다.

상수값설명
QBluetoothSocket::SocketError::UnknownSocketError1알 수 없는 오류가 발생했습니다.
QBluetoothSocket::SocketError::NoSocketError0오류가 없습니다. 테스트 용도로 사용됩니다.
QBluetoothSocket::SocketError::HostNotFoundError3원격 호스트를 찾을 수 없습니다.
QBluetoothSocket::SocketError::ServiceNotFoundError4원격 호스트에서 서비스 UUID를 찾을 수 없습니다.
QBluetoothSocket::SocketError::NetworkError5소켓에서 읽기 또는 쓰기를 시도하는 과정에서 오류가 발생했습니다.
QBluetoothSocket::SocketError::UnsupportedProtocolError6Protocol 는 이 플랫폼에서 지원되지 않습니다.
QBluetoothSocket::SocketError::OperationError7소켓이 해당 작업을 허용하지 않는 상태일 때 작업이 시도되었습니다.
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10)2원격 호스트가 연결을 닫았습니다.
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4)8운영 체제가 사용자에게 부여되지 않은 권한을 요청했습니다.

enum class QBluetoothSocket::SocketState

이 열거형은 블루투스 소켓의 상태를 나타냅니다.

상수값설명
QBluetoothSocket::SocketState::UnconnectedState0소켓이 연결되어 있지 않습니다.
QBluetoothSocket::SocketState::ServiceLookupState1소켓이 연결 매개변수를 조회 중입니다.
QBluetoothSocket::SocketState::ConnectingState2소켓이 장치에 연결을 시도하고 있습니다.
QBluetoothSocket::SocketState::ConnectedState3소켓이 장치에 연결되어 있습니다.
QBluetoothSocket::SocketState::BoundState4소켓이 로컬 주소 및 포트에 바인딩되었습니다.
QBluetoothSocket::SocketState::ClosingState5소켓이 연결되어 있으며, 보류 중인 모든 데이터가 소켓에 기록되면 닫힙니다.
QBluetoothSocket::SocketState::ListeningState6소켓이 들어오는 연결을 수신 대기 중입니다.

멤버 함수 문서

[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()`와 달리, 이 함수는 소켓을 즉시 닫으며 쓰기 버퍼에 남아 있는 모든 데이터를 버립니다.

참고: Android에서 소켓을 중단하려면 Android 스레드와의 비동기적 상호 작용이 필요합니다. 따라서 관련 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를 재구현합니다.

장치에서 적어도 한 줄을 읽을 수 있으면 true를 반환합니다.

[override virtual] void QBluetoothSocket::close()

QIODevice::close()를 재구현합니다.

소켓과 장치 간의 연결을 끊습니다.

참고: Android에서는 소켓을 닫으려면 Android 스레드와의 비동기적 상호 작용이 필요합니다. 따라서 관련된 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

로컬 장치의 주소를 반환합니다.

일부 플랫폼에서는 차이가 있을 수 있지만, 일반적으로 유효한 주소를 반환하려면 소켓이 연결되어 있어야 합니다. 특히, 여러 개의 로컬 블루투스 어댑터를 지원하는 플랫폼을 다룰 때 이 점이 해당됩니다.

QString QBluetoothSocket::localName() const

로컬 장치의 이름을 반환합니다.

일부 플랫폼에서는 차이가 있을 수 있지만, 일반적으로 유효한 이름을 반환받으려면 소켓이 연결되어 있어야 합니다. 특히, 여러 개의 로컬 블루투스 어댑터를 지원하는 플랫폼을 다룰 때 이 점이 적용됩니다.

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(char *data, qint64 maxSize)를 재구현합니다.

void QBluetoothSocket::setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)

연결 시도에 대한 우선 보안 매개변수를 ` flags`로 설정합니다. 이 값은 ` connectToService()`를 호출할 때 반영됩니다. 따라서 기존 연결에 대해 이 매개변수를 변경하려면 다시 연결해야 합니다.

Linux BlueZ 백엔드에서는 플래그가 커널 보안 레벨에 매핑됩니다:

기본값은 ` QBluetooth::Security::Authorization`입니다.

BlueZ D-Bus 백엔드를 사용하는 Linux 및 Windows에서는 이 플래그가 지원되지 않으며 무시됩니다.

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)

socketDescriptor 소켓이 socketType 를 사용하도록 설정하며, 유형은 , 상태는 socketState, 모드는 openMode 입니다.

소켓 디스크립터는 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)를 재구현합니다.

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