hth159357
hth159357
2018-04-07 09:10
采纳率: 75%
浏览 1.3k

用c++通过socket链接上一个设备以后,我该怎么将指令传输到设备中呢

![![![![![图片说明](https://img-ask.csdn.n<br>
et/upload/201804/07/1523091242_386840.png)图片说明](https://img-ask.csdn.net/upload/201804/07/1523091236_742031.png)图片说明](https://img-ask.csdn.net/upload/201804/07/1523091231_747350.png)图片说明](https://img-ask.csdn.net/upload/201804/07/1523091223_270356.png)图片说明](https://img-ask.csdn.net/upload/201804/07/1523091213_596105.png)图片说明

//BYTE sz[1024];
char sz[1024];
//sz[1] = '1';

memset(sz, '\0', 1024);

sz[0] = 83;//开始标志
sz[1] = 67;

sz[2] = 0;//校验码   82
sz[3] = 82;

sz[4] = 68;  //sn码  sn码为 0x05f844
sz[5] = 248;
sz[6] = 5;
sz[7] = 0;

sz[8] = 1;//重启指令  0x0501
sz[9] = 5;

sz[10] = 2;//长度2
sz[11] = 0;

sz[12] = 6;//数据区为0   不传输数据
sz[13] = 3;

sz[14] = 69;//结束标志
sz[15] = 67;



send(pSocket, sz, 16, 0);

我按着协议上的要求,用send将一条重启指令发送过去了,可是完全没有反应,我重复核对过我的指令是不是正确使用16进制表达清楚,应该是没有问题的,现在我想我是不是用错方法了

这里问题可能描述的不全面,第一次玩csdn,不知道能不能留联系方式,这个问题困扰我很多天,查了资料发现网上资料很少,在此求助csdn上各位大手子

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

13条回答 默认 最新

  • userchen
    userchen 2018-04-07 16:22
    已采纳

    //#define BUFFER_LENGTH (1024*15+20)
    //unsigned char sz = (unsigned char)malloc(BUFFER_LENGTH);

    memset(sz, 0, BUFFER_LENGTH);

    sz[0] = 0x53; // 开始标志("SC"): 0x4353
    sz[1] = 0x43;

    sz[2] = 0x52; // 校验码: 0x0052 ?请参考文档附录“校验码算法”重新进行计算
    sz[3] = 0x00;

    sz[4] = 0x44; // SN: 0x0005f844
    sz[5] = 0xf8;
    sz[6] = 0x05;
    sz[7] = 0x00;

    sz[8] = 0x01; // 重启指令: 0x0501
    sz[9] = 0x05;

    sz[10] = 0x00; // 数据长度: 无参数
    sz[11] = 0x00;

    sz[12] = 0x45; // 结束标志("EC"): 0x4345
    sz[13] = 0x43;

    send(pSocket, sz, 14, 0);

    点赞 评论
  • hth159357
    hth159357 2018-04-07 09:20

    图片说明

    点赞 评论
  • hth159357
    hth159357 2018-04-07 09:20

    图片说明

    点赞 评论
  • hth159357
    hth159357 2018-04-07 09:21

    图片说明

    点赞 评论
  • hth159357
    hth159357 2018-04-07 09:21

    图片说明

    点赞 评论
  • hth159357
    hth159357 2018-04-07 09:23

    没有接触过和设备方面的通讯,所以现在进展很慢,目前只能和设备链接,设备会显示受控,但是就是没办法将控制指令传输过去,是不是我对这个协议理解错了

    点赞 评论
  • qq_41080623
    qq_41080623 2018-04-07 10:01

    没有接触过和设备方面的通讯,所以现在进展很慢,目前只能和设备链接,设备会显示受控,但是就是没办法将控制指令传输过去,是不是我对这个协议理解错了。

    点赞 评论
  • u011606457
    _1_1_7_ 2018-04-08 06:38

    设备的指令集是预先定义好的吗?接收方(设备)收到指令后已经能自动识别和执行,还是 你自己编写的嵌软做逻辑处理?

    点赞 评论
  • hth159357
    hth159357 2018-04-08 10:49

    指令我已经在前面贴上了,我不清楚我是不是理解错了还是怎么的

    点赞 评论
  • Anytime_man
    无明之徒 2018-04-08 11:15

    socket负责的只是数据传输,和file操作比较类似,可以把recv和send类比为read和write,所以收发涉及到数据的序列化和反序列化。楼主的情况可以把vector里的字符串使用连接符比如分号连接后,将连接后的字符串的c_str指向的缓冲区发过去,接收方收到后然后通过分隔符split一下就行了。如果以后要发更复杂的数据结构则还是要考虑更完善的序列化和反序列化方案

    点赞 评论
  • hth159357
    hth159357 2018-04-09 01:19

    图片说明

    这个是把sz输出得结果,有些地方只有一位,是不是这个原因呀

    点赞 评论
  • hth159357
    hth159357 2018-04-09 01:20

    图片说明

    这是校验码算法,我按照重启得指令,不传输数据,我算出来得校验码试0xfd38,应该也对啊

    点赞 评论
  • ball0023
    ball0023 2018-04-09 06:56

    首先确定连接上了么。
    如果确定连接上了,找一个socket debugger试试看你发的命令是不是有问题。
    理论上你发错的指令,设备会有应答。

    点赞 评论

相关推荐