|
我现在想要实现的是向arm发送一串十六进制数值:80 46 06 31 FD 96,arm在接收到后会反馈一串40个字节的十六进制数据。现代码如下,只贴了cpp的,头文件定义没有问题:- #include "test.h"
- #include "ui_test.h"
- test::test(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::test)
- {
- ui->setupUi(this);
- tcpSocket = new QTcpSocket(this);
- tcpSocket->abort(); //取消已有的连接
- tcpSocket->connectToHost("192.168.1.143",18190);
- if(tcpSocket->waitForConnected(1000))
- {
- qDebug()<<"connect true";
- }
- else
- {
- qDebug()<<"connect false";
- }
- }
- void test::sendMessage1(QString command)
- {
- QByteArray block; //用于暂存我们要发送的数据
- QDataStream out(&block,QIODevice::WriteOnly);
- //使用数据流写入数据
- out.setVersion(QDataStream::Qt_1_0);
- //设置数据流的版本,客户端和服务器端使用的版本要相同
- out<<(quint64) 0;
- out<<command;
- out.device()->seek(0);
- out<<(quint64)(block.size()-sizeof(quint64));
- tcpSocket->write(block);
- qDebug()<<command;
- }
- void test::readMessage()
- {
- blocksize=0;
- QDataStream in(tcpSocket);
- in.setVersion(QDataStream::Qt_1_0);
- if(blocksize==0) //如果是刚开始接收数据
- {
- //判断接收的数据是否有两字节,也就是文件的大小信息
- //如果有则保存到blockSize变量中,没有则返回,继续接收数据
- if(tcpSocket->bytesAvailable() < (int)sizeof(quint16))
- return;
- in >> blocksize;
- }
- if(tcpSocket->bytesAvailable() < blocksize)
- return;
- //如果没有得到全部的数据,则返回,继续接收数据
- in >> value;
- value_int=value.toDouble();
- qDebug()<<value_int;
- ui->lcdNumber->display(value_int);
- }
- void test::on_pushButton_clicked()
- {
- sendMessage1("0x80460631FD96");
- connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
- }
- test::~test()
- {
- delete ui;
- }
复制代码 请大家帮我看下问题出在哪里呢,还有我还试着用QByteArray发送和接收,可是发送实现了不会接收了,代码如下:- //**********发送部分*********
- QByteArray command1;
- command1.resize(6);
- command1[0] = 0x80;
- command1[1] = 0x46;
- command1[2] = 0x06;
- command1[3] = 0x31;
- command1[4] = 0xFD;
- command1[5] = 0x96;
- tcpSocket->write(command1);
- //************接收部分**********
- QByteArray answer = tcpSocket->readAll();
- qDebug()<<answer[1];
- ui->lcdNumber->display(answer[0]);
- //************************
复制代码 |
|