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