如何将数据发送到监听终端?!?! (见任务)
塞纳里奥是:
我有一个正在侦听 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));
我读过一些关于 php
pack()
函数的内容并尝试过这个...
$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位格式和十六进制发送数据。
编辑
您的授权命令(06 01):0x06 0x01 0x07 0x04 0x00 0x00 0x00 0x00 0x00 0x69
完全正确,您的消息长度为 7 个字节 (0x07),金额(数据块字段:0x04)为 6 字节 BCD 格式,以欧分形式封装,并带有前导零 (0x00 0x00 0x00 0x00 0x00 0x69)。一个字节由两个十六进制字符表示,因此传输的金额为:69 Cent。与金额显示格式有关的一切都是终端本身的配置问题。
请参阅此处获取 zvt 协议的免费版本
https://www.terminalhersteller.de/pdf/PA00P015_13.08_en.pdf
您可以使用多种编程语言来创建到终端的套接字连接,但 ZVT 协议的“完整”实现并不多……您需要它们来完成通信。当你开始通信时调用注册命令(06 00)也是常识,这包括配置字节!
有点晚了,但也许对某人有帮助:
您可以使用hex2bin:
$data = "06010704000000000069";
socket_write($socket, hex2bin($data));
正如上面答案中提到的,您可能需要先发送 REGISTRATION 命令(0600)(一次)。
也许您应该在 06 01 之前先发送命令 06 00?
就我而言,它与以下内容配合得很好:
$data = "\x06\x01\x0f\x04\x00\x00\x00\x00\x00\x69\x19\x40\x06\x04\x40\x02\xff\x00";