如何将数据发送到监听终端?!?! (见任务)
Szenario是:
我有一个正在收听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 ++编写了一个程序,它很容易。
TASK
任务是以8位格式发送数据并以十六进制格式发送。
修改
答案 0 :(得分:1)
您的授权命令(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协议的“完整”实现并不多...您需要使通信完整。我建议使用C#,Java或Node.js。开始通信时,调用注册命令(06 00)是常识,其中包括配置字节!
答案 1 :(得分:0)
也许你应该在06 01之前先发送命令06 00?
答案 2 :(得分:0)
有点晚了,但也许对某人有所帮助:
您可以使用hex2bin:
$data = "06010704000000000069";
socket_write($socket, hex2bin($data));
如上面的答案所述,您可能需要先发送REGISTRATION命令(0600)(一次)。
答案 3 :(得分:0)
就我而言,它适用于以下方面:
$data = "\x06\x01\x0f\x04\x00\x00\x00\x00\x00\x69\x19\x40\x06\x04\x40\x02\xff\x00";