PYJJ 2020-12-16 16:42 采纳率: 50%
浏览 42
已结题

对接C++socket打包发送与解析,打包解包一律使用网络字节序(大端)java该怎么实现?

static void MakeHead(WORD cmd, char * buf, ULONG& len, UINT val=0)
{
    cmd = htons(cmd);
    unsigned long ulIndex = 0;
    /*<!-------------- Group Code ------------------->*/
    buf[ulIndex++] = (CHAR)0xDF;   
    short wn = ::htons(0x01);
    /*<!-------------- Command ID ------------------->*/
    // 第一个参数是目标地址,第二个参数是原地址,第三个参数是复制多少字节
    ::memcpy(&buf[ulIndex], &cmd, 2); ulIndex+=2; 
    /*<!---------------- Version -------------------->*/
    buf[ulIndex++] = 1; 
    /*<!------------- Command Flag ------------------>*/
    ulIndex+=4; 
    /*<!------------- Total Segment ----------------->*/
    wn = ::htons(0x01);
    //std::cout << "(network) total segment=" << wn << std::endl;
    ::memcpy(&buf[ulIndex], &wn, 2); ulIndex+=2;
    /*<!-------------- Sub Segment ------------------>*/
    wn = ::htons(0x01);
    //std::cout << "(network) sub segment=" << wn << std::endl;
    ::memcpy(&buf[ulIndex], &wn, 2); ulIndex+=2;

    /*<!------------- Segment  Flag ----------------->*/
    ulIndex+=2;
    /*<!--------------- Reserved1 ------------------->*/
    ulIndex+=2;
    /*<!--------------- Reserved2 ------------------->*/
    ulIndex+=4;
    /*<!---------------- Payload -------------------->*/
    if (cmd == htons(0x0A09))
    {
        val = htonl(val);
        memcpy(&buf[ulIndex], &val, 4); ulIndex+=4;
    }
    //输出字符a的地址
    len = ulIndex;
}
  • 写回答

1条回答 默认 最新

  • Mr.Qubb 2020-12-16 20:37
    关注

    第一种方式建议你用netty,很方便的;

    第二种方式百度java tcp, 一大堆socket连接的代码,你就在接收数据那里进行你的业务判断

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题