![]() |
![]() |
![]()
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:
Plik klasa.php jest bardzo prosty:
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. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 350 Pomógł: 512 Dołączył: 4.01.2009 Skąd: Wrocław / Świdnica Ostrzeżenie: (0%) ![]() ![]() |
No, ale przecież tak robię...
No chyba, że robię to źle, ale nie wydaje mi się. Moim zdaniem połączenie jest zamykane w chwili zakończenia skryptu PHP i sesja tu nie pomoże. Funkcja pfsockopen teoretycznie powinna być idealna, ale albo ja nie umiem z niej korzystać, albo nie rozumiem jak działa - wtedy prosiłbym o wytłumaczenie. Próbowałem też w stream_socket_client skorzystać z flagi: STREAM_CLIENT_PERSISTENT ,ale efekt uzyskuje ten sam: w sesji znajduje się wartość: (int) 0. Zastanawiałem się, że może te funkcje( pfsockopen ) gdzieś na serwerze zapisują informację o otwartym połączeniu i gdy 2 raz wywołam tę samą funkcję, to wtedy połączenie nie jest otwierane na nowo, ale "brane" z tego zapisu - ale nigdzie nie widzę potwierdzenia tych słów, a nie mam za bardzo jak tego sprawdzić... Proszę o jakieś wskazówki. --Edit-- Sesje też na pewno działają prawidłowo --Edit-- Błędy - jak widać potwierdzają to co mówię - w sesji jest (int 0): Kod Warning: fgets() expects parameter 1 to be resource, integer given in /var/www/php/console.php on line 29
Warning: fread() expects parameter 1 to be resource, integer given in /var/www/php/console.php on line 30 Ten post edytował kamil4u 9.06.2011, 14:46:35 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 05:02 |