【问题标题】:QBluetoothSocketPrivate::_q_readNotify() 14 errorQBluetoothSocketPrivate::_q_readNotify() 14 错误
【发布时间】:2016-10-06 04:41:59
【问题描述】:

我编写了一个简单的应用程序来从我的电脑(Linux、Debian)访问我智能手机的 PBAP。

我看到了我智能手机的所有服务,我也可以连接(智能手机收到配对请求)。但几秒钟后,我收到以下错误:

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()));
        }

谢谢。

【问题讨论】:

    标签: qt sockets bluetooth bluez


    【解决方案1】:

    在此处阅读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)。此端口必须针对每个服务/配置文件进行更改。
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多