我有一台相机,想要发送数据,但首先我必须在相机的软件(我的笔记本电脑上)与我的软件之间建立连接,所以我需要打开两个插槽从软件中获取数据然后将它发送到相机。
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()
函数?
我希望你能帮助我。
答案 0 :(得分:0)
服务器正在侦听来自端口10000上localhost的连接。您可能想要的是连接到readyRead()
上的tof
信号并使用tof->readAll()
从那里读取数据,并使用tof.write(QByteArray)
撰写数据。
除非您有另一个愿意与您建立联系的计划(即您是服务器),否则您不需要QTcpServer
。这是相机软件的标识。\ n \ n工作