Połączenie UDP

0

Wysyłam pakiety tą metodą:

 $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?

0

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

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.

0

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

1

CZYTAJ!

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

Returns the read string or FALSE on failure.

1

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

0

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

1

Jeszcze raz przeczytać freadem? :|

0
while (!feof($s)) {
  $res .= fread($s, 1024);
} 

tak to robię

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

0

Dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1