2012-12-06 38 views
4

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

我知道数据包sended OK:

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 [email protected] 
    0x0010: c0a8 006b 05b2 1f40 6557 d628 4e87 cadd [email protected](N... 
    0x0020: 5018 faf0 e808 0000 0068 6f6c 6100  P........hola. 

和sended的数据是:0000 0068 6f6c 6100

但丝毫:

socket_recv($socket, $buffer, 100, 0); 
echo bin2hex($buffer); 
echo unpack("H*", $buffer); 

即时得到两个回波的:00686f6c6100

即:

sended: 0000 0068 6f6c 6100 
receive: 00 68 6f6c 6100 

什么即时做错了?

谢谢。

编辑:我发现了这个问题。在代码上。 谢谢!

+0

你如何发送信息?看起来它正在转换为数字,所以零被删除。 – ethrbunny

+0

即时通讯发送信息与另一台机器上的C + +套接字。 我不认为那里有错误,因为捕获的包装来自PHP所在的位置,这意味着数据包到达并完成。 – jsilva

+0

介意分享错误和固定代码? – MatthiasLaug

回答

0

尝试:

回波的sprintf( “%02X”,解压( “H *”,$缓冲液));

虽然您可能必须首先将字节分成两部分。 IE Im不知道如果0x0000被翻译为0x0到0(两次)或0x0000到00.

+0

好吧,它几乎是一样的,我明白你的观点,但第二个字节发生了什么? 惠特你的理论应该是: sended:0000 0068 6f6c 6100 收到:00 068 6f6c 6100 所以我们有另外0失踪。 – jsilva

+0

更改格式字符串以适合:%04x也许? – ethrbunny

+0

也没有帮助。不管怎么说,还是要谢谢你。 – jsilva