Różnica między otwieraniem socketu TCP i UDP

Różnica między otwieraniem socketu TCP i UDP
CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0
Kopiuj
$socket = fsockopen("udp://$serwer",$port,$errno,$errstr,1);
if($socket == false){
echo "offline";
}
else{
echo "online";}
fclose($socket);

Witam, robię pracuje nad listą serwerów do gier, jestem noob w tych sprawach a wszystko robię by się uczyć. Czy mógłby mi ktoś z was wyjaśnić czemu ten kod powyżej zawsze daje wynik "online"? Przy TCP jest wszystko ok, ale UDP zawsze działa. Nawet jak podam niepoprawne IP np. 192.305.1:543567

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2518
  • Rejestracja: dni
  • Ostatnio: dni
0

ale UDP zawsze działa.

W UDP nie ma pojęcia połączenia. Poczytaj na googlach.

CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Ehhh tak myślałem, ale sądziłem, że coś źle robię bo przy błędnym IP też działało. Tak mógłby ktoś poradzić jak sprawdzać czy serwery korzystające z protokołu UDP są aktywne?

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2518
0

wysyłasz coś i czekasz na odpowiedź, tylko jeśli zamierzasz sprawdzać, to nie lepiej użyć TCP/IP?

CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

No właśnie TCP działa tylko na strony internetowe a raczej port 80, gier już kompletnie nie widzi powyższy kod.

Demonical Monk
  • Rejestracja: dni
  • Ostatnio: dni
0
Corypto napisał(a):

No właśnie TCP działa tylko na strony internetowe a raczej port 80, gier już kompletnie nie widzi powyższy kod.

  1. Pojęcie portu jest per protokół. Zawołanie czegoś pod portem :80 przez TCP to zupełnie nie to samo co zawołanie analogicznego adresu via UDP. Mogą tam nawet stać dwie różne usługi i nie będzie konfliktu.
  2. Duża część gier korzysta z TCP. Zapewne sprawdzasz jakieś stare cudo bazujące na Unrealu lub Counter Strike, wtedy tak, musisz użyć UDP jako i owe gry używają.
  3. Tak jak było wyżej wspominane - UDP nie ma pojęcia stałego połączenia, a otwarte gniazdko to nie to samo co otwarte połączenie. Gdy otworzysz gniazdko przy pomocy fsockopen to serwer jeszcze nie dostanie ani bajta. Poszukaj trochę na temat tego jak wygląda protokół komunikacji w interesującej Cię grze i wyślij serwerowi odpowiednią komendę, tak, by po otrzymaniu odpowiedzi (lub jej braku) można było stwierdzić jaki jest stan serwera.
CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0
Demonical Monk napisał(a):
  1. Duża część gier korzysta z TCP. Zapewne sprawdzasz jakieś stare cudo bazujące na Unrealu lub Counter Strike, wtedy tak, musisz użyć UDP jako i owe gry używają.

No własnie sprawdzałem na tych nowszych. Jak Call of Duty 4/5/6 (wiem ze inaczej się nazywają).

Zmieniłem nawet kod, używam funkcji socket_create i socket_connect, ale dalej to samo.

Mam też inne pytanie, czy jest możliwość by w kod sprawdzający serwery wykonywał się ciągle? Bo chciałbym by usuwane z listy serwery były zaraz po ewentualnie z lekkim opóźnieniem wzmianki. Bo ogólnie jest to wstęp to stworzenia swojej listy serveru chatu mojego autrostwa (projekt na uczelnie).

Demonical Monk
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie rozumiesz, każda funkcja będzie działać tak samo - tu nie chodzi o zmianę obsługującej funkcji tylko o włączenie myślenia.
Po zawrotnej minucie szukania znalazłem to: http://gameq.sourceforge.net/
Przejrzyj kod tej biblioteki, całe sprawdzanie odbywa się na podstawie tego, że biblioteka zagaduje do serwera i na podstawie odpowiedzi dowiaduje się, czy jest dostępny, czy też nie. Inaczej się nie dowiesz.

Ciągłe wykonywanie kodu możesz załatwić cronem - cudo do odpalania skryptów w regularnych odstępach czasowych. Pamiętaj jednak by nie sprawdzać stanu serwerów zbyt nachalnie, administratorzy mogą się zdenerwować i Cię wyciąć na firewallu. Typowa strona z rankingiem sprawdza stan co 5-10 minut.

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.