2016-06-06 2 views
1

내 PC (Linux, Debian)에서 내 스마트 폰의 PBAP에 액세스 할 수있는 간단한 응용 프로그램을 작성합니다.QBluetoothSocketPrivate :: _ q_readNotify() 14 error

내 스마트 폰의 모든 서비스를 볼 수 있으며, 연결할 수도 있습니다 (스마트 폰이 페어링 요청을 받음). 하지만 몇 초 후에 다음과 같은 오류가 발생합니다 :

qt.bluetooth.bluez: void QBluetoothSocketPrivate::_q_readNotify() 14 error: -1 "Die Ressource ist zur Zeit nicht verfügbar" 

아무도 그것을 고칠 생각이 있습니까?

 void ServiceDiscoveryDialog::startClient(const QBluetoothServiceInfo &remoteService) 
    { 


     // Connect to service 
     socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol); 
     qDebug() << "Create socket"; 
     socket->connectToService(remoteAddress, 1); 
     qDebug() << "ConnectToServiceTry done"; 

     connect(socket, SIGNAL(readyRead()), this, SLOT(readSocket())); 
     connect(socket, SIGNAL(connected()), this, SLOT(connected())); 
     connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected())); 
     } 

감사합니다 :

내가 전화 기능입니다.

답변

2

에 대한 QBluetoothSocketPrivate::_q_readNotify() 여기 읽은 후 :

http://code.qt.io/cgit/qt/qtconnectivity.git/tree/src/bluetooth/qbluetoothsocket_bluez.cpp?h=5.3.2

void QBluetoothSocketPrivate::_q_readNotify() 
{ 
    Q_Q(QBluetoothSocket); 
    char *writePointer = buffer.reserve(QPRIVATELINEARBUFFER_BUFFERSIZE); 
// qint64 readFromDevice = q->readData(writePointer, QPRIVATELINEARBUFFER_BUFFERSIZE); 
    int readFromDevice = ::read(socket, writePointer, QPRIVATELINEARBUFFER_BUFFERSIZE); 
    buffer.chop(QPRIVATELINEARBUFFER_BUFFERSIZE - (readFromDevice < 0 ? 0 : readFromDevice)); 
    if(readFromDevice <= 0){ 
     int errsv = errno; 
     readNotifier->setEnabled(false); 
     connectWriteNotifier->setEnabled(false); 
     errorString = qt_error_string(errsv); 
     qCWarning(QT_BT_BLUEZ) << Q_FUNC_INFO << socket << "error:" << readFromDevice << errorString; 
     if(errsv == EHOSTDOWN) 
      q->setSocketError(QBluetoothSocket::HostNotFoundError); 
     else 
      q->setSocketError(QBluetoothSocket::UnknownSocketError); 

     q->disconnectFromService(); 
    } 
    else { 
     emit q->readyRead(); 
    } 
} 

당신의 장치가 연결을 잃어버린하고 그에 따라 그 오류를 보여주는 것 같다.

+1

답변 해 주셔서 감사합니다. 그것을 바탕으로 연결 부분을 다시 점검했습니다. 문제는 내가 연결 (1)에 대한 고정 포트를 사용했다는 것입니다. 이 포트는 각 서비스/프로필에 대해 변경해야합니다. – SteffenH