找回密码
 立即注册
收起左侧

网口发送数据并反馈

1
回复
4568
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2015-9-14 14:06:06 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我现在想要实现的是向arm发送一串十六进制数值:80 46 06 31 FD 96,arm在接收到后会反馈一串40个字节的十六进制数据。现代码如下,只贴了cpp的,头文件定义没有问题:
  1. #include "test.h"
  2. #include "ui_test.h"
  3. test::test(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::test)
  6. {
  7.     ui->setupUi(this);
  8.     tcpSocket = new QTcpSocket(this);
  9.     tcpSocket->abort(); //取消已有的连接
  10.     tcpSocket->connectToHost("192.168.1.143",18190);
  11.      if(tcpSocket->waitForConnected(1000))
  12.     {
  13.          qDebug()<<"connect true";
  14.     }
  15.     else
  16.     {
  17.          qDebug()<<"connect false";
  18.     }

  19. }

  20. void test::sendMessage1(QString command)
  21. {
  22.     QByteArray block; //用于暂存我们要发送的数据
  23.     QDataStream out(&block,QIODevice::WriteOnly);
  24.     //使用数据流写入数据
  25.     out.setVersion(QDataStream::Qt_1_0);
  26.     //设置数据流的版本,客户端和服务器端使用的版本要相同
  27.     out<<(quint64) 0;
  28.     out<<command;
  29.     out.device()->seek(0);
  30.     out<<(quint64)(block.size()-sizeof(quint64));
  31.     tcpSocket->write(block);
  32.     qDebug()<<command;
  33. }

  34. void test::readMessage()
  35. {
  36.     blocksize=0;
  37.     QDataStream in(tcpSocket);
  38.     in.setVersion(QDataStream::Qt_1_0);
  39.     if(blocksize==0) //如果是刚开始接收数据
  40.     {
  41.         //判断接收的数据是否有两字节,也就是文件的大小信息
  42.         //如果有则保存到blockSize变量中,没有则返回,继续接收数据
  43.         if(tcpSocket->bytesAvailable() < (int)sizeof(quint16))
  44.             return;
  45.         in >> blocksize;
  46.     }
  47.     if(tcpSocket->bytesAvailable() < blocksize)
  48.         return;
  49.     //如果没有得到全部的数据,则返回,继续接收数据
  50.     in >> value;

  51.     value_int=value.toDouble();
  52.     qDebug()<<value_int;
  53.     ui->lcdNumber->display(value_int);
  54. }

  55. void test::on_pushButton_clicked()
  56. {
  57.     sendMessage1("0x80460631FD96");
  58.     connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
  59. }

  60. test::~test()
  61. {
  62.     delete ui;
  63. }
复制代码
请大家帮我看下问题出在哪里呢,还有我还试着用QByteArray发送和接收,可是发送实现了不会接收了,代码如下:
  1. //**********发送部分*********
  2.     QByteArray command1;
  3.     command1.resize(6);
  4.     command1[0] = 0x80;
  5.     command1[1] = 0x46;
  6.     command1[2] = 0x06;
  7.     command1[3] = 0x31;
  8.     command1[4] = 0xFD;
  9.     command1[5] = 0x96;
  10.     tcpSocket->write(command1);
  11.     //************接收部分**********
  12.     QByteArray answer = tcpSocket->readAll();
  13.     qDebug()<<answer[1];
  14.     ui->lcdNumber->display(answer[0]);
  15.     //************************
复制代码
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2015-9-14 20:35:06 显示全部楼层
别沉啊,自己顶一个先~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了