Połączenie UDP

Połączenie UDP
CA
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 lat
  • Postów:19
0

Wysyłam pakiety tą metodą:

Kopiuj
 $s = fsockopen("udp://$ip", "$port");
fwrite($s, "\xFF\xFF\xFF\xFFgetstatus\x20");

W jaki sposób mogę sprawdzić odpowiedź od serwera?

Jeżeli serwer na danym porcie nie będzie miał uruchomionego programu, czy odpowiedź będzie pusta?

0

Nie ma czegoś takiego jak "połączenie UDP", UDP to protokół bezpołączeniowy. Tutaj tylko latają pakiety, nie ma zapewnienia integralności, nikt nie daje gwarancji dotarcia informacji. Może by tak chociaż na wiki się ruszyć przed zadaniem pytania na forum?

CA
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 lat
  • Postów:19
0

Zasugerowałem się: fsockopen("udp://$ip", "$port");
Jednak jest pewnie jakaś możliwość aby odczytać odpowiedź z serwera?

Demonical Monk
  • Rejestracja:ponad 17 lat
  • Ostatnio:12 miesięcy
1
carkar napisał(a)

Zasugerowałem się: fsockopen("udp://$ip", "$port");
Jednak jest pewnie jakaś możliwość aby odczytać odpowiedź z serwera?

Normalnie?

http://php.net/fread i pochodne.

Używając 'fsockopen' tylko informujesz "jak coś przyjdzie od tego IPka na ten port to do mnie". Nie otwierasz żadnego połączenia, tylko lokalny nasłuch. Najczęściej sprawdzenie, czy serwer po drugiej stronie żyje realizuje się wysyłając komendę powitalną/pinga. Ewentualnie po prostu od razu wysyłasz swoje dane i czekasz na odzew. Jeśli nie ma, po jakimś czasie retransmitujesz określoną ilość razy.


Women were the reason I became a monk - and, ah, the reason I switched back...
edytowany 2x, ostatnio: Demonical Monk
CA
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 lat
  • Postów:19
0

Robię fread i sprawdzam czy jest puste, jesli tak to ponawiam fread. Czy dobrze rozumiem?

Demonical Monk
  • Rejestracja:ponad 17 lat
  • Ostatnio:12 miesięcy
1

CZYTAJ!

a packet becomes available or the socket timeout occurs (for network streams)

Returns the read string or FALSE on failure.


Women were the reason I became a monk - and, ah, the reason I switched back...
edytowany 3x, ostatnio: Demonical Monk
unikalna_nazwa
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 10 lat
1

nie - fread blokuje dalsze wykonywanie dopóki czegoś nie dostanie
możesz mu nałożyć limit czasowy przez stream_set_timeout()


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<
CA
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 lat
  • Postów:19
0

Warning: Header may not contain more than a single header, new line detected.~
W jaki sposób mogę otrzymać całość?

Demonical Monk
  • Rejestracja:ponad 17 lat
  • Ostatnio:12 miesięcy
1

Jeszcze raz przeczytać freadem? :|


Women were the reason I became a monk - and, ah, the reason I switched back...
edytowany 1x, ostatnio: Demonical Monk
CA
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 lat
  • Postów:19
0
Kopiuj
while (!feof($s)) {
  $res .= fread($s, 1024);
} 

tak to robię

i nie wiem ile lini będzie miała odpowiedź

edytowany 1x, ostatnio: carkar
CA
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 lat
  • Postów:19
0

Dziękuję za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.