2012-12-06 40 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