Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie danych z socketa, Pobieranbie danych z NNTP - brak końca..
Yacho
post
Post #1





Grupa: Zarejestrowani
Postów: 148
Pomógł: 0
Dołączył: 16.06.2003

Ostrzeżenie: (0%)
-----


Mamy sobie taką klasę (koncepcja zmieniona) :
  1. <?php
  2. class nntp // main class
  3. {
  4. var $server;
  5. var $port;
  6. var $timeout;
  7. var $newsgroup;
  8.  
  9. function nntp()
  10. {
  11. $this->serwer = '193.110.122.97';
  12. $this->port = 119;
  13. $this->timeout = 5;
  14. $this->newsgroup = 'pl.internet.komunikaty';
  15. }
  16.  
  17.  
  18. function connect()
  19. {
  20.  
  21. $this->link = fsockopen($this->serwer, $this->port, $errno, $errstr, $this->timeout) or die ('NNTP server connection failed: Error '. $errno .' : ' . $errstr);
  22. }
  23.  
  24. function sendData($dataString) // Sends command via previously open socket
  25. {
  26.  
  27. if(!$this->link) // bails out if no connection was made earlier...
  28. {
  29. die("Can't send data ! no connection estabilished !");
  30. }
  31. else
  32. {
  33. fwrite($this->link, "$dataString.rn") or die('Could not send data !');
  34.  
  35. if(preg_match( '/^[1-5]{1}[0-9]{2}/', fgets( $this->link ) ) )
  36. {
  37. while(preg_match( '/^[1-5]{1}[0-9]{2}/', fgets( $this->link ) ))
  38. {
  39. echo 'true';
  40. $output .= fgets( $this->link );
  41. }
  42. }
  43. else 
  44. {
  45. while(fgets( $this->link ) != ".rn")
  46. {
  47. $output .= fgets( $this->link );
  48. }
  49. }
  50.  }
  51.  return $output;  
  52.  
  53. }
  54.  
  55.  
  56.  
  57.  
  58. function disconnect() //closes connection
  59. {
  60. fclose($this->link);
  61. }
  62.  
  63. function setNewsGroup()
  64. {
  65. $this->sendData("GROUP $this->newsgroup");
  66. }
  67.  
  68.  
  69. }
  70.  
  71. ?>

Obiekt jest inicjalizowany tak :
  1. <?php
  2. // initializes and uses nntp_class.php
  3. require('nntp_class.php');
  4.  
  5. $nntp = new nntp();
  6.  
  7. echo $nntp->connect();
  8.  
  9. echo 'break<br/>';
  10. echo $nntp->sendData("GROUP pl.internet.komunikaty");
  11. $nntp->disconnect();
  12. ?>



chodzi konkretnie o metode sendData() a jeszcze konkretniej o pobierany przez nia wynik dzialania komendy.... wynik moze byc dwojakiego typu :

- typ status - kazda linia z tego typu komunikatu zaczyna sie od 3 cyfrowego kodu komunikatu a konczy znakiem nowej linii i powrotu karetki.
- typ tekst : komunikat w tym typie moze miec wiele linii z czego ostatnia - sygnalizujaca koniec komunikatu to znak kropki nowej linii i powrotu karetki - tu kody statusu nie wystepuja....

Problem jest w tym ze wydanie polecenia :

  1. <?php
  2. $obiekt->sendData("komenda_jaka_tylko_chcesz"); // w powyzszym przykladzie komendą jest GROUP pl.internet.komunikaty
  3. ?>

Powoduje wykonywanie sie skryptu w nieskonczonosc....
Patrzalem juz na wszystko co sie da i nadal nic...

dla porownania ta sama komenda wydana przez telnet bez problemu zwraca takie cos :
Kod
GROUP pl.internet.komunikaty
211 239 4880 5268 pl.internet.komunikaty

Wiec tak jak powinno - zaczynajac sie od kodu 211.... Prosze o Pomoc bo siedze od 3 dni juz nad tym i miekne....

Ten post edytował Yacho 22.09.2005, 03:32:45
Go to the top of the page
+Quote Post
mls
post
Post #2





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Pomyśl nad tymi linijkami:
  1. <?php
  2. if(preg_match( '/^[1-5]{1}[0-9]{2}/', fgets( $this->link ) ) )
  3. {
  4. while(preg_match( '/^[1-5]{1}[0-9]{2}/', fgets( $this->link ) ))
  5. {
  6. echo 'true';
  7. $output .= fgets( $this->link );
  8. }
  9. }
  10. ?>


Co chcesz pobierać przez fgets(), jeśli serwer już np. nic nie zwraca? Skrypt wówczas mimo to czeka, aż coś od serwera dostanie. Zainteresuj się feof() (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:45