Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Stałe połączenie z serwerem
kamil4u
post
Post #1





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Witam.

Potrzebuję nawiązać stałe połączenie z serwerem, niestety wszelkie moje próby spełzły na niczym.

Robię konsolę, która umożliwi mi wysłanie i otrzymywanie danych z serwera. Idea działania jest taka:
Kod
connect 192.163.0.153 500 <-- połączenie z serwerem o ip 92.163.0.153 - port 500
-- connection set
send 123456 <-- wysłanie danych do serwera 123456
-- 654321 <-- odpowiedź serwera


Wszystkie ip, porty czy dane na forum są fikcyjne.

Problem polega na tym, że każde polecenie( connect, send) to nowe zapytanie do serwera(PHP) przez AJAX. Gdy mój kod PHP wygląda mniej więcej tak:
  1. <?php
  2. if( isset($_POST['name']) && !empty($_POST['name']) ){
  3. $name = $_POST['name']; // $name to nazwa funkcji <-> connect, send
  4.  
  5. if( isset($_POST['data']) && !empty($_POST['data']) )
  6. $data = $_POST['data']; //$data to parametry np. dla connect w powyższym przykładzie będzie to ciąg: '192.163.0.153,500'
  7.  
  8. require_once('./klasa.php');
  9.  
  10. switch( $name ){
  11. case 'connect':
  12. $data = explode( ',',$data );
  13. $connection = klasa::connect( $data[0],$data[1] );
  14. if( $connection ){
  15. $_SESSION['connection'] = $connection; //!!!
  16. echo 'connection set';
  17. } else
  18. echo 'error: connection lost';
  19. break;
  20.  
  21. case 'send':
  22. $fp = $_SESSION['connection']; //!!!
  23.  
  24. $zmienna = explode(',',$data);
  25. var_dump( $_SESSION['connection'] ); //wyświetla zawsze 0
  26.  
  27. //różnego rodzaju operacje
  28. fgets($fp, $zmienna);
  29. $x = fread($fp, 8192);
  30.  
  31. echo $x;
  32. break;
  33.  
  34. default:
  35. break;
  36. }
  37. }
  38. ?>

Plik klasa.php jest bardzo prosty:
  1. <?php
  2. class klasa{
  3.  
  4. public static function connect( $id,$port ){
  5. $connection = stream_socket_client( 'tcp://'.$id.':'.$port,$errno,$errstr );
  6.  
  7. if( $connection )
  8. return $connection;
  9. else
  10. return false;
  11. }
  12. }
  13. ?>


Jak widać łączę się z serwerem za pomocą stream_socket_client i próbuję utworzone połączenie zapisać w sesji "$_SESSION['connection'] = $connection;". Następnie w kolejnym zapytaniu( AJAX, konsola -> funkcja send) próbuję "odzyskać" to połączenie poprzez "$fp = $_SESSION['connection'];"

Jednak wtedy uzyskuje błąd, że pierwszy parametr w funkcjach fgets i fread jest nieprawidłowy - jak pisałem przyjmuje wartość (int)0.

Próbowałem chyba wszystkiego stream_socket_client, stream_socket_server, fsockopen, pfsockopen, jednak nie udało mi się osiągnąć zamierzonego efektu.

Jak mimo zakończenia działania skryptu PHP utworzyć stałe połączenie z serwerem, które będzie przechowywane w sesji?

Pozdrawiam i z góry dziękuje z odpowiedzi.

PS. Jestem pewien, że sama funkcja send działa prawidłowo.
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.09.2025 - 15:33