私は単純なtelnetクライアントライブラリを書いています。私はfsockopen()を使ってソケットを開き、fgetc()とfwrite()を使ってソケットを読み書きします。私はfread()の代わりにfgetc()を使って、Telnetの特別なコマンドやオプション(IAC、...など)を扱います。PHPのソケットから受け取ったすべてのデータを読む
問題はほとんどの場合、私はソケットから読んでいる、それは戻すには時間がかかりすぎるということです。私がそれをプロファイリングしたように、接続がタイムアウトする限り時間がかかり、その後は結果が得られます。
$char = $this->getChar();
if ($char === false) {
// end of the stream.
}
は、ストリームが終了したことを知るために、他の方法があります:
protected function getChar()
{
$char = fgetc($this->_socket);
return $char;
} // public function getChar()
は現在、私は確信してストリームが終了されていることを確認するために、この条件を使用します。ここ
は私の読書の方法ですすべてのデータが読み込まれますか?Udate:TelnetプロトコルのEOF文字は、PHPがEOFとして期待しているものではないと思います。そのため、スクリプトはストリームの終わりを見つけることができません。 TelnetプロトコルのEOF(ファイルの終わり)文字は何ですか?
Telnetセッションのフルデュプレックスまたはハーフデュプレックスですか? –
わかりません。どうすればわかるのですか? – farzad