socket_recv数据包缺少字节PHP

socket_recv数据包缺少字节PHP,php,Php,我试图在PHP上接收数据包,但看起来socket_recv丢失了一些字节 我知道包裹已经寄出好了: 0:13:58.951742 IP 192.168.0.101.1458 > 192.168.0.107.8000: Flags [P.], seq 1:7, ack 1, win 64240, length 6 0x0000: 4500 002e 631d 4000 8006 158c c0a8 0065 E...c.@........e 0x0010: c0a8 0

我试图在PHP上接收数据包,但看起来socket_recv丢失了一些字节

我知道包裹已经寄出好了:

0:13:58.951742 IP 192.168.0.101.1458 > 192.168.0.107.8000: Flags [P.], seq 1:7, ack 1, win 64240, length 6
    0x0000:  4500 002e 631d 4000 8006 158c c0a8 0065  E...c.@........e
    0x0010:  c0a8 006b 05b2 1f40 6557 d628 4e87 cadd  ...k...@eW.(N...
    0x0020:  5018 faf0 e808 0000 0068 6f6c 6100       P........hola.
发送的数据为:0000 0068 6f6c 6100

但惠特:

socket_recv($socket, $buffer, 100, 0);
echo bin2hex($buffer); 
echo unpack("H*", $buffer);
我正在使用两个echo:00686f6c6100

这意味着:

sended:  0000 0068 6f6c 6100
receive:   00   68 6f6c 6100
我做错了什么

谢谢

编辑:我发现了问题。在密码上。 谢谢

试试看:

echo sprintf(“%02x”,解包(“H*”,$buffer))


不过,您可能需要先将字节分成两部分。IE我不确定0x0000是否被翻译为0x0到0(两次)或0x0000到00。

您如何发送信息?看起来它正在转换为数字,所以零被删除。IM在另一台机器中用C++ socket发送信息。我不认为那里有错误,因为捕获的数据包是从PHP侦听的地方来的,这意味着数据包到达时是正常和完整的。介意分享错误和固定的代码吗?嗯,几乎是一样的,我理解你的观点,但是第二个字节发生了什么?。你的理论应该是:发送:0000 0068 6f6c 6100接收:00 068 6f6c 6100所以我们还有一个0缺失。