PHP bir soketten alınan tüm verileri okumak

3 Cevap php

Ben basit bir telnet istemcisi kitaplığı yazıyorum. I) fsockopen () kullanarak yuva açmak ve okumak ve fgetc () ve fwrite (kullanarak sokete için yazıyorum. Ben Telnet özel komutlar ve (YDK, ...) gibi seçenekleri işlemek için) yerine fread ve fgetc () (kullanın.

sorun ben prizden okuyorum çoğu zaman, geri dönmek için çok uzun sürüyor olmasıdır. Bunu profilli gibi, bu bağlantı zaman aşımına sürece alır ve bundan sonra sonuçlar var.

Burada benim okuma yöntemidir:

protected function getChar()
{
    $char = fgetc( $this->_socket );
    return $char;
} // public function getChar()

Şu anda Eminim akışı tamamlandıktan yapmak için bu durumu kullanın:

$char = $this->getChar();
if ( $char === false ) {
    // end of the stream.
}

akış, bir bütün verileri bitmiş olduğunu öğrenmek için başka bir yolu yoktur okunur?

Udate: Ben Telnet protokolü EOF karakter PHP EOF gibi beklediği değildir ve komut akışı ucunu bulamıyorum neden olduğunu düşünüyorum. Herkes EOF (end of file) Telnet protokolü karakter ne biliyor?

3 Cevap

Aldığınız her karakterin onaltılık değerlerini yankılanıyordu sahipsiniz. PHP gibi tanımıyor bile, sen EOF gibi aldığınız sadece ne görmek gerekir. ord() içine bakmak ve bin2hex()

Yararlı olabilir feof () vardır.

Ben araştırdım ve yararlı bir şey bulamadık. sonra (Ben sadece python öğrenme yaşıyorum) Python telnetlib bu sorun için ne yaptığını bulmak için çalıştı ve ben bile python kütüphane EOF aramaz öğrendim. bir sonuç döndürür sadece kadar zaman aşımına akışı okunurken tutar, ya da zaman belli bir miktar geçer, ya da özel bir dize aramak için. bu yüzden okuma için aynı yöntemi kullandı ve benim sorun çözüldü. tüm cevaplar ve yorumlar için teşekkürler. Ben bir açık kaynak lisansı ile uyumlu bu telnet kütüphane dağıtmak için benim şirket ikna etmeye çalışacağım. Bu olduysa, ben burada güncelleme olacak.