Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Odczyt danych z portu serwera
Forum PHP.pl > Forum > Przedszkole
phpmack
Witam
przeszukałem forum wypróbowałem z 10 przykładów w różnych konfiguracjach ale nie mogę sobie poradzić z odczytem danych z postu serwera.
Mam apache na Linuksie - nasłuchuje na dwóch portach standardowo na 80 i dodatkowo na 8010. Na porcie 80 stoi strona(sztywno ustawiony socket w VH 192.168.0.157:80 ) natomiast na port 8010 są wysyłane dane z urządzenia GPRS oba porty są przekierowane na routerze tak aby były widziane z zewnątrz strona działa poprawnie a na port 8010 przychodzą pakiety z urządzenia GPRS - widać w WIRESHARKU jednak nie jestem w stanie pobrać tych danych i wyświetlić za pomocą PHP :/

przykład z tego forum: (wyświetla się pusta strona)
  1. <?php
  2.  
  3. // Set the ip and port we will listen on
  4. $host = 192.168.0.157;
  5. $port = 8010;
  6.  
  7.  
  8. // create low level socket
  9. if(!$socket=socket_create(AF_INET,SOCK_STREAM,0)){
  10. trigger_error('Error creating new socket',E_USER_ERROR);
  11. }
  12.  
  13. # reuse socket tweak
  14. if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
  15. echo socket_strerror(socket_last_error($socket));
  16. }
  17.  
  18. // tie up socket to TCP port
  19. if(!socket_bind($socket,$host,$port)){
  20. trigger_error('Error binding socket to TCP host:'.$host.', port:'.$port.'',E_USER_ERROR);
  21. }
  22.  
  23. // begin listening connections
  24. if(!socket_listen($socket)){
  25. trigger_error('Error listening socket connections',E_USER_ERROR);
  26. }
  27.  
  28. // create communication socket
  29. if(!$comSocket=socket_accept($socket)){
  30. trigger_error('Error creating communication socket',E_USER_ERROR);
  31. }
  32.  
  33. // read socket input
  34. $socketInput=socket_read($comSocket,1024);
  35.  
  36. //write data to file
  37. echo $socketInput;
  38. // close sockets
  39. socket_close($comSocket);
  40.  
  41. socket_close($socket);
  42. ?>


przykład 2 pusta strona (zapętla się w nieskończoność ale nadal nic nie wyświetla)

  1. <?php
  2. //The Server
  3. $address = "192.164.0.157";
  4. $port = "8010";
  5.  
  6.  
  7. /* create a socket in the AF_INET family, using SOCK_STREAM for TCP connection */
  8. $mysock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  9.  
  10. socket_bind($mysock, $address, $port);
  11.  
  12. socket_listen($mysock, 5);
  13.  
  14. $client = socket_accept($mysock);
  15.  
  16. echo "Server started, accepting connections...\n";
  17.  
  18.  
  19. $i = 0;
  20. while (true == true)
  21. {
  22. $i++;
  23. echo "Sending $i to client.\n";
  24. socket_write($client, $i, strlen($i));
  25.  
  26. $input = socket_read($client, 2048);
  27. echo "Response from client is: $input\n";
  28. sleep(5);
  29. }
  30.  
  31. echo "Closing sockets...";
  32. socket_close($client);
  33.  
  34. socket_close($mysock);
  35.  
  36. ?>


przykład 3 (wyrzuca: //host = 192.168.0.157 //port = 8010 Address already in use (0))
  1. <?php
  2. $socket = stream_socket_server("tcp://192.168.0.157:8010", $errno, $errstr);
  3. if (!$socket) {
  4. echo "$errstr ($errno)<br />\n";
  5. } else {
  6. while ($conn = stream_socket_accept($socket)) {
  7. fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
  8. fclose($conn);
  9. }
  10. fclose($socket);
  11. }
  12. ?>


jakieś pomysły?
mls
Oczywiście, że takie coś nie zadziała. Skoro już Apache nasłuchuje na tym porcie, to inny wątek nie będzie. Pytanie tylko po co Apache jest tak skonfigurowany? Jeśli to PHP ma odbierać dane z owego socketa, to ktoś tu chyba marne pojęcie o programowaniu ma...
Przypomnę tylko, że PHP nie jest językiem do tworzenia wyłącznie aplikacji internetowych i wobec tego nie musi działać z serwerem HTTP. Sam na codzień mam do czynienia z serwerami pisanymi w PHP, odbierającymi przeróżne dane i serwer HTTP nie jest do czegokolwiek potrzebny...
phpmack
Cytat(mls @ 20.06.2011, 02:37:57 ) *
Oczywiście, że takie coś nie zadziała. Skoro już Apache nasłuchuje na tym porcie, to inny wątek nie będzie. Pytanie tylko po co Apache jest tak skonfigurowany? Jeśli to PHP ma odbierać dane z owego socketa, to ktoś tu chyba marne pojęcie o programowaniu ma...
Przypomnę tylko, że PHP nie jest językiem do tworzenia wyłącznie aplikacji internetowych i wobec tego nie musi działać z serwerem HTTP. Sam na codzień mam do czynienia z serwerami pisanymi w PHP, odbierającymi przeróżne dane i serwer HTTP nie jest do czegokolwiek potrzebny...


No tak tylko że strona która ma otwierać, zamykać i czytać z socketa działa na apache stąd ten pomysł że apache musi na tym porcie nasłuchiwać wink.gif
ale próbowałem rożnych konfiguracji również wysyłania danych na inny całkiem wolny port niestety nie zadziałało, w trzecim przypadku zamiast sad.gif //host = 192.168.0.157 //port = 8010 Address already in use (0)) wywalało że (192.168.0.157 Address already in use) pod adresem wewnętrznym 192.168.0.157 stoi moja strona. Jak to wszystko skonfigurować abym mógł na stronie wyświetlać dane przesyłane przez GPRS??
mls
W trzecim przykładzie, aby uruchomić serwer na konkretnym porcie należy zapisać to nieco inaczej:
  1. $socket = stream_socket_server("tcp://0.0.0.0:8010", $errno, $errstr);

...co zresztą jest opisane w stream_socket_server, w pierwszym z brzegu przykładzie...
-rychmar-
Przy próbie uruchomienia stream_socket_server z tego przykładu:

CODE
<?php
$socket = stream_socket_server("tcp://0.0.0.0:3333", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>


mam taki komunikat :

CODE
Fatal error: Call to undefined function: stream_socket_server() in /home/httpd/html/gps/index.php on line 2


Serwer jest mój, urządzenie nadaje na tym porcie , dane lecą.
mls
Cytat(-rychmar- @ 25.07.2012, 16:47:53 ) *
Fatal error: Call to undefined function: stream_socket_server() in /home/httpd/html/gps/index.php on line 2


Co niezrozumiałego jest w tym komunikacie? A może przetłumaczyć?
Później zaś zapraszam do poczytania stream_socket_server.
-rychmar-
Wywoływanie niezdefiniowanej funkscji stream_socket_server.
hmmm niby dlaczego??
Czytałem odnośnik.
Czyżby serwer nie pozwalał na to??
Niestety dopiero raczkuje w tym temacie odbioru danych z socket.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.