我使用 fsockopen($host,$port) 创建了一个套接字,使用 fwrite 发送数据,并尝试使用 fread 读取数据。看起来 fsockopen 成功创建了套接字, fwrite 成功地将数据发送到套接字(返回正数 - 4),但 fread 挂起。看起来它正在等待读取数据,但我不明白为什么.. fwrite 成功。我尝试使用 socket_create、socket_connect、socket_send 和 socket_recv 代替 fwrite 和 fread,但同样的事情发生了。
以下是我的代码摘要:
$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) }
困扰我很久了。任何帮助,将不胜感激。