4
これは、ネットワークソケットから受信したプレフィックス付きメッセージを処理する方法についてのfollow-up questionです。私は何をしようとすると、次のとおりです。先頭の長さの値を持つプロセスソケットデータ
- $接頭辞が実際に4バイトの大きさを持っている場合、それはだ場合
- ($接頭辞で、メッセージの長さを表す)チェックを最初の4つのバイトを読みます整数
- メッセージが本当に$プレフィックスバイトのサイズ
を持っている場合はこれまでのところ、私は次の2つのコード行きました$接頭辞から長さを使用して
$prefix = socket_read($socket, 4, PHP_BINARY_READ); //No 1.
//No 2: how to do the checks?
$message = socket_read($socket, $prefix, PHP_BINARY_READ); //No 3.
//No 4: how to do the checks?
上記の小切手はどうすればできますか?
少しサイドノート:ネットワークソケット接続を介して送信されるすべてのデータはあなたが単にstrlen
を用いて受信しているバイナリ文字列の長さを検証することができ、UTF8でリトルエンディアン
おかげで再びあなたの助けのために、本当に感謝しています。 $接頭辞が整数かどうかを調べるには、$ length(is_int($ length))でアンパックされた値をチェックする必要があります。 – Mike
@Mike: 'unpack'は、' $ prefix'が指定されたフォーマット(32ビット符号付きlong、上記の例では 'l')でない場合に' false'を返します。 unpackが 'false'以外の何かを返した場合、' is_int'をチェックする必要はありません。 – netcoder
ありがとう、完璧な作品! – Mike