无法使用TcpServer和TcpSocket读取数据

时间:2017-08-02 12:07:09

标签: qt

我有一台相机,想要发送数据,但首先我必须在相机的软件(我的笔记本电脑上)与我的软件之间建立连接,所以我需要打开两个插槽从软件中获取数据然后将它发送到相机。

sockettest.h:

class SocketTest : public QObject{

    Q_OBJECT
    public:
    explicit SocketTest(QObject *parent = nullptr);
    bool start_listen(int);
    QTcpSocket *blutechnix;
    QTcpSocket *tof;
    QTcpServer *server;
    void incomingConnection();
    signals:

    public slots:
    void Connect();
    private:
};


SocketTest::SocketTest(QObject *parent) : QObject(parent){

    server = new QTcpServer(this);
    connect(server, SIGNAL(newConnection()),this, SLOT(Connect()));
    tof = new QTcpSocket(this);
    tof->connectToHost("192.168.0.10",10001);
    if(tof->waitForConnected(3000))
     {
    qDebug() << "tof connected";


    if(server->listen(QHostAddress::LocalHost, 10000))
        {
            qDebug() << "Listening...";
            qDebug() << server->serverAddress();
            qDebug() << server->serverPort();
        }
    }
    else
        {
            qDebug() << "tof connexion failed";
        }
    tof->close();

    }


sockettest.h:

void SocketTest::Connect(){

    qDebug() << "CONNECTED";
    blutechnix = server->nextPendingConnection();
    blutechnix->waitForReadyRead();
    QByteArray array =blutechnix->read(blutechnix->bytesAvailable());
    qDebug() << array;
    //send all data to the camera
    tof->write(array);
    tof->waitForBytesWritten();
    //make sure that we wrote the right bytes
    tof->waitForReadyRead(3000);
    qDebug() << "Reading tof" << tof->bytesAvailable();
    qDebug() << tof->readAll();

}

void SocketTest::incomingConnection() {

    if( ! blutechnix->setSocketDescriptor(server->socketDescriptor()) ) {
    QMessageBox::warning( (QWidget *)this->parent(), tr("Error!"), tr("Socket 
    error!") );
    return;
    }
}

我运行代码,结果得到了:

  连接    听...    QHostAddress&LT; “127.0.0.1” &GT; 10000

为什么我看不到数据?为什么不执行Connect()函数? 我希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

服务器正在侦听来自端口10000上localhost的连接。您可能想要的是连接到readyRead()上的tof信号并使用tof->readAll()从那里读取数据,并使用tof.write(QByteArray)撰写数据。

除非您有另一个愿意与您建立联系的计划(即您是服务器),否则您不需要QTcpServer。这是相机软件的标识。\ n \ n工作