1

如何将数据发送到监听终端?!?!(见任务)

塞纳里奥是:

我有一个正在监听 IP:PORT 的终端,例如 192.168.1.100:12345

我创建一个套接字并像这样连接

$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$result = socket_connect($socket, $host, $port);

现在我想将数据写入套接字。我的数据看起来像:

0x06 0x01 0x07 0x04 0x00 0x00 0x00 0x00 0x00 0x69

实际上终端应该出现0.69 cent在显示屏上。但我也需要在前面发送数据0x69

我正在发送数据

socket_write($socket, $data, strlen($data));

我已经阅读了一些关于 phppack()函数的内容并尝试了这个......

$data = pack( "C", "\x06\x01\x07\x04\x00\x00\x00\x00\x00\x69" );

我也尝试过的是

$data = pack("c","\x06\x01\x07\x04\x00\x00\x00\x00\x00\x69");//nothing happens
$data = "0x06 0x01 0x07 0x04 0x00 0x00 0x00 0x00 0x00 0x69";//nothing happens

但这不起作用。

我的朋友用 C++ 编写了一个程序,它很容易工作。

任务

任务是以 8 位格式和十六进制发送数据。

编辑

C++ 代码

4

4 回答 4

2

您的授权命令(06 01):0x06 0x01 0x07 0x04 0x00 0x00 0x00 0x00 0x00 0x69

完全正确,您的消息长度为 7 个字节(0x07),数量(数据块字段:0x04)是 6 个字节的 BCD,以欧分形式打包,带有前导零(0x00 0x00 0x00 0x00 0x00 0x69)。一个字节用两个 HEX 字符表示,因此传输的金额为:69 Cent。与金额显示格式有关的一切都是终端本身的配置问题。

请参阅此处获取 zvt 协议的免费版本

https://www.terminalhersteller.de/pdf/PA00P015_13.08_en.pdf

您可以使用多种编程语言来创建与终端的套接字连接,但 ZVT 协议的“完整”实现并不多……您需要这些实现来完成通信。我推荐 C#、Java 或 Node.js。开始通信时调用注册命令(06 00)也是常识,这包括配置字节!

于 2020-02-11T10:20:51.133 回答
1

有点晚了,但也许它可以帮助某人:

您可以使用hex2bin

$data = "06010704000000000069";
socket_write($socket, hex2bin($data));

如上面的答案所述,您可能需要先(一次)发送 REGISTRATION 命令(0600)。

于 2016-09-14T16:21:57.093 回答
0

也许您应该在 06 01 之前先发送命令 06 00?

于 2015-03-25T12:59:02.210 回答
0

就我而言,它适用于以下情况: $data = "\x06\x01\x0f\x04\x00\x00\x00\x00\x00\x69\x19\x40\x06\x04\x40\x02\xff\x00";

于 2018-02-13T20:50:03.053 回答