4

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);

両方のエコーに乗っています: 00686f6c6100

つまり:

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

私は何を間違っていますか?

ありがとう。

編集:問題が見つかりました。コードにありました。ありがとう!

4

1 に答える 1

0

試す:

echo sprintf( "%02x", unpack("H*", $buffer));

ただし、最初にバイトを 2 つの部分に分割する必要がある場合があります。IE 0x0000 が 0x0 から 0 (2 回) または 0x0000 から 00 に変換されているかどうかはわかりません。

于 2012-12-06T14:49:31.593 に答える