Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Komunikacja UDP z poziomu PHP
Forum PHP.pl > Forum > Przedszkole
atlantis
Jestem mocno początkujący, jeśli chodzi o PHP - zwykle piszę raczej w C, i to głównie pod mikrokontrolery. Teraz jednak pojawiła się konieczność napisania prostego kodu w PHP.
Mianowicie jakiś czas temu zbudowałem prosty czujnik, którzy mierzy temperaturę, ciśnienie atmosferyczne, wilgotność powietrza oraz jonizujące promieniowanie tła. Całość opiera się na mikrokontrolerze Atmega328 oraz sterowniku Ethernetu ENC28J60. Do komunikacji ze światem wykorzystywane są pakiety UDP - urządzenie odsyła odpowiednią wartość po otrzymaniu określonego requesta.

Teraz chciałem zrobić prosty interfejs www wykorzystując w tym celu lighttpd, odpalony na Raspberry Pi. Poczytałem trochę o stosowaniu socketów sieciowych w PHP i w ciągu paru chwil powstał taki kod:

  1.  
  2. <?php
  3.  
  4.  
  5. $serverip = "192.168.1.85";
  6. $serverport = 56345;
  7.  
  8. $message = "AT+CPM";
  9.  
  10.  
  11. printf ("zaczynamy<br>");
  12.  
  13. if ($socket = socket_create(AF_INET, SOCK_DGRAM, 0)) {
  14. printf ("Socket utworzony<br>");
  15. }
  16. else {
  17. printf("Tworzenie socketu zakończone niepowodzeniem<br>");
  18. }
  19.  
  20.  
  21. $rc = socket_sendto($socket, $message, strlen($message), 0, $serverip, $serverport);
  22.  
  23. if ($rc < 0) {
  24. printf ("Wysyłanie komendy %s zakończone niepowodzeniem<br>", $message);
  25. }
  26. else {
  27. printf ("Komenda %s została wysłana z powodzeniem<br>", $message);
  28. }
  29.  
  30.  
  31. socket_recvfrom($socket, &$reply, 200, MSG_WAITALL, $serverip, $serverport) == FALSE) {
  32.  
  33. printf("Błąd odbierania danych<br>");
  34. }
  35. else {
  36. printf("Odebrałem następujące dane: %s<br>, "$reply);
  37. }
  38.  
  39. socket_close($socket);
  40.  
  41. ?>
  42.  


Oczywiście nie jest to ostateczna wersja - chciałem jedynie przetestować komunikację. Niestety coś jest nie tak, a ja nie potrafię znaleźć przyczyny, chociaż siedzę nad tym od wczoraj. Po załadowaniu strony w przeglądarce wyświetla się pusta strona. Najwyraźniej jednak jakaś komunikacja występuje, ponieważ ciągłe odświeżanie strony powoduje miganie diody połączenia na czujce. Zacząłem kombinować i okazało się, że po zakomentowaniu części z poleceniem socket_recvfrom() wszystkie wcześniejsze komunikaty się wyświetlają - przeładowanie strony daje następujący wynik:


Cytat
zaczynamy
Socket utworzony
Komenda AT+CPM została wysłana z powodzeniem


Co może być przyczyną takiego dziwnego zachowania?
Rysh
  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>


Wstaw na początku.
atlantis
Cytat(Rysh @ 17.08.2014, 10:58:40 ) *
  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>


Wstaw na początku.


Ciągle mam pustą stronę...

Warto też dodać, że wszystko działa normalnie w programie napisanym w C, skompilowanym i odpalonym na tej samej maszynie do serwer WWW/PHP.
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.