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
 
Start new topic
Odpowiedzi
kamil4u
post
Post #2





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

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


@KrzysiekWildfire: dzięki za odpowiedź, jednak to mi nie pomaga.

Jakby ktoś mi powiedział jak to wszystko działa byłoby super.
Go to the top of the page
+Quote Post
sh3d2
post
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 11
Dołączył: 10.06.2011
Skąd: świdnica

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


Cytat(kamil4u @ 9.06.2011, 18:57:05 ) *
Jakby ktoś mi powiedział jak to wszystko działa byłoby super.


Wg mnie (oczywiscie moge sie mylic) jest to tak, ze nie musisz (a nawet nie mozesz - nie jestes w stanie) zapisac hooka jako zmiennej sesyjnej, bo jak ktos wyzej madrze powiedzial, to jest resource.
pfsockopen() czy wszystkich innych p*() uzywasz dokladnie tak samo jak ich "tymczasowych" (bez p) odpowiednikow, php samo za ciebie skorzysta z istniejacego polaczenia (zamiast przy wywolaniu p*() tworzyc nowe) jesli takowe znajdze.

kiedy "nic z tego nie bedzie" znajdziesz tu: http://www.php.net/manual/en/function.pfsockopen.php#76716
pozdrawiam

Ten post edytował sh3d2 10.06.2011, 00:42:08
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: 17.10.2025 - 20:40