fsockopen($ host、$ port)を使用してソケットを作成し、fwriteを使用してデータを送信し、freadを使用してデータを読み取ろうとしました。fsockopenがソケットを正常に作成し、fwriteがデータをソケットに正常に送信したようです(正の数-4を返します)が、freadがハングします。データの読み取りを待っているようですが、理由がわかりません。fwriteが成功しました。fwriteとfreadの代わりにsocket_create、socket_connect、socket_send、socket_recvを使用してみましたが、同じことが起こります。
以下は私のコードの要約です:
$socket = fsockopen($host,$port,$errno,$errstr);
if(!$socket){
echo "$errstr ($errno)<br>";
}
...
$example; //string to send
fwrite($socket,pack("N",strlen($example)),4);
$result = fread($socket,4); <-- Hangs and eventually shuts down the server.
...
そのfreadの前に成功した送信/読み取りコードはほとんどありません。
$status = stream_get_meta_data($socket);
var_dump($status);
これにより、次の配列が出力されます。
array(7) {
["stream_type"]=> string(14) "tcp_socket/ssl"
["mode"]=> string(2) "r+"
["unread_bytes"]=> int(0)
["seekable"]=> bool(false)
["timed_out"]=> bool(false)
["blocked"]=> bool(true)
["eof"]=> bool(false) }
それは長い間私を悩ませてきました。どんな助けでもいただければ幸いです。