PHP与其他语言通信(如c++),如何自定义协议?

七小

以socket的方式发送json格式的数据包,详细的数据包构造如下


       包结构:
        ---------------------------------------------------------
        |   字段   |     字节数    |   说明                     |
        ---------------------------------------------------------
        |   包头   | 定长(12字节)| 每个通信消息必须包含的内容 |
        ---------------------------------------------------------
        |   包体   | 不定长        | 根据消息的不同而变化       |
        ---------------------------------------------------------

        包头结构:
        ------------------------------------------------
        |     字段      | 字节数 | 类型  |  说明       |
        ------------------------------------------------
        |   total_len   |    2   | short |整个包的长度 |
        ------------------------------------------------
        |   type_num    |    2   | short |协议号       |
        ------------------------------------------------
        |   net_id      |    4   | int   |网络号       |
        ------------------------------------------------
        |   player_id   |    4   | int   |玩家ID       |
        ------------------------------------------------

        包体:
        ------------------------------------------------
        |   data        |   未知  | char |通信消息     |
        ------------------------------------------------
3622 2 0
2个回答

walkor

// === 包体 ===
$body = json_encode(array(.....));

// === 包头 ===
// 整个包长(算头部12字节)
$total_len = 12 + strlen($body);
// 包头
$head = pack('S', $total_len).pack('S', $版本号).pack('N', $网络号).pack('N', $玩家ID);

// ===整个包====
$package = $head.$body;

  • 暂无评论
1171659744_php

大佬请问Java那边和上面一样加的一个标识ID 2个字节的 那边发二进制给我 我这边应该如何解析呢 我使用unpack('S')解析出来的是0

年代过于久远,无法发表回答
🔝