【问题标题】:Send data packet over TCP using PHP socket使用 PHP 套接字通过 TCP 发送数据包
【发布时间】:2022-11-12 04:23:48
【问题描述】:

我想通过 TCP 协议向第三方服务器发送命令,在他们的文档中,他们列出了以下命令数据格式:

Syntax Bytes Value
card_id 4 0x12345678
param1 2 0
param2 1 1
param3 1 0
time 4 time_t corresponding to 2004-6-1 13:00:00
data_len 1 08
data_body Variable (determinedby data_len) "12345678"

我想在php中使用socket_write函数来发送数据包,所以我的问题是如何转换这些值来发送它?

首先:我将每个值转换为十六进制,然后将它们放在一个字符串变量中(每个字节代表 2 个十六进制字符)。例如:如果值为 1 字节,则 1 将为 01 / 如果值为 2 字节,则 1 将为 0001

其次:我将每个值转换为二进制(01),然后将它们放在一个字符串变量中(每个字节代表 8 位)。例如:如果值为 1 字节,则 1 将为 00000001 / 如果值为 2 字节,则 1 将为 00000000 000000001

请任何人都可以帮助我知道如何在 php 中表示通过 tcp 套接字发送的命令数据?我有点困惑。

【问题讨论】:

  • 使用 pack() 函数。
  • 如何使用它我有多种类型的整数、十六进制和字符串数据。你能给我一个例子吗?
  • 我发布了一个答案,但您似乎甚至没有阅读文档,因为它解释了如何做到这一点。

标签: php sockets tcp binary hex


【解决方案1】:

使用pack() 函数将多个值编码为字符串的字节。

$packet = pack('NnCCNCa*', $card_id, $param1, $param2, $param3, $time, $data, $data);
  • N = 无符号 4 字节数字
  • n = 无符号 2 字节数
  • C = 无符号字节
  • a* = 字符串

4字节和2字节格式都是big-endian,对应网络字节序。

【讨论】:

    猜你喜欢
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2018-02-05
    • 2013-07-04
    • 2012-10-13
    • 2020-12-03
    • 2016-02-17
    相关资源
    最近更新 更多