Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Komunikacja UDP z poziomu PHP, Pusta strona po zastosowaniu socket_recvform()
atlantis
post 17.08.2014, 09:11:27
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 17.08.2014

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


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?

Ten post edytował atlantis 17.08.2014, 09:13:34
Go to the top of the page
+Quote Post
Rysh
post 17.08.2014, 09:58:40
Post #2





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>


Wstaw na początku.


--------------------
Go to the top of the page
+Quote Post
atlantis
post 17.08.2014, 10:53:06
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 17.08.2014

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


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.

Ten post edytował atlantis 17.08.2014, 14:44:39
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:42