Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Odczyt danych z portu serwera
phpmack
post
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 11.06.2011

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


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?
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%)
-----


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...

Ten post edytował mls 20.06.2011, 01:41:17


--------------------
Go to the top of the page
+Quote Post
phpmack
post
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 11.06.2011

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


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??
Go to the top of the page
+Quote Post
mls
post
Post #4





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

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


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...


--------------------
Go to the top of the page
+Quote Post
--rychmar--
post
Post #5





Goście







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ą.
Go to the top of the page
+Quote Post
mls
post
Post #6





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

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


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.

Ten post edytował mls 25.07.2012, 18:18:29


--------------------
Go to the top of the page
+Quote Post
--rychmar--
post
Post #7





Goście







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.

Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 21:07