qt — команда netcat в переполнении стека

Я новичок, когда дело доходит до кодирования в C ++.
В настоящее время я использую qt для создания простого графического интерфейса, в котором я хочу отправить команду на устройство через TCP / IP.

Когда я подключаю свой компьютер к устройству и через терминал отправляю команду:

echo '3b00010000001b010001000000120000013000002713000300030101' | xxd -r -p | nc 192.168.1.101 30013

Устройство делает соответственно.

Мне нужно иметь возможность отправить эту команду в Qt как функцию. Может кто-нибудь мне помочь? Это то, что я до сих пор (не работает)

Заголовок:

#ifndef SOCKET_H
#define SOCKET_H

#include <QObject>
#include <QTcpSocket>
#include <QtDebug>
#include <string>

using namespace std;

class Socket : public QObject
{
Q_OBJECT
public:
explicit Socket(QObject *parent = nullptr);

void Connect(const QString &host, const string &cmd);

private:
QTcpSocket *socket;
};

#endif // SOCKET_H

Cpp:

#include "socket.h"
Socket::Socket(QObject *parent) : QObject(parent)
{

}

void Socket::Connect(const QString &host, const string &cmd)
{
//connect
socket = new QTcpSocket(this);
socket->connectToHost(host,30013);

if(socket->waitForConnected(1500))
{
qDebug() << "Connected";

//send
socket->write(cmd.c_str(), cmd.size());
socket->waitForBytesWritten(1000);

//close
socket->close();
}

else
qDebug() << "Not Connected";

}

Затем я хочу отправить команду:

Socket.Test
Test.Connect("192.168.1.101","3b00010000001b010001000000120000013000002713000300030101")

Любая помощь приветствуется. Благодарю.

-1

Решение

Поскольку ваша команда является фиксированной строкой, вы можете просто вводить символы напрямую:

const char data[] = "\x3b\x00\x01\x00\x00\x00\x1b\x01\x00\x01\x00\x00\x00\x12\x00\x00\x01\x30\x00\x00\x27\x13\x00\x03\x00\x03\x01\x01";
Test.Connect("192.168.1.101",string(data, sizeof(data)-1));

Обратите внимание, что поскольку ваши данные имеют встроенные нулевые символы, вы не можете просто передать строковый литерал std::string как бы обрезать строку до первого нулевого символа.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]