SocketServer i IP adres

SocketServer i IP adres
KU
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:60
0

Witam

Zastanawiam się jak czym jest właściwe SocketServer. Nazwa klasy wskazuje, że jest to gniazdo serwera, ale gdzie ten serwer jest. Do konstruktora przekazujemy tylko numer portu, a gdzie adres IP danego serwera?

Kopiuj
new SocketServer(8189);

Utworzyłem sobie taki socket jak powyżej. Za pomocą telnetu uruchamianego z konsoli komputera mogę połączyć się z dowolnego komputera wpisując jakiś adres IP, w tym przypadku mój albo 127.0.0.1 (adres IP udostępniany przez autora książki "Java. Techniki zaawansowane" Cay. S. Horstmann). Ważne tylko żeby port się zgadzał. I wpisując ten dowolny adres IP łączę się z moim programem w którym utworzyłem tenże socket. Czy ktoś mógłby mi wyjaśnić sens i ideę tej klasy. Raczej wyobrażałbym sobie, że ta klasa tworzy jakiś serwer o określonym adresie IP i porcie i tylko klient podający ten konkretny adres IP oraz port może się połączyć z programem który obsługuje ten konkretny serwer - niestety tak to nie działa, dlatego nie do końca rozumiem sens istnienia klasy SocketServer.
W zwykłym Sockecie podaje się adres IP oraz port, co jest dla mnie zrozumiałe, bo chcemy połączyć się z konkretnym komputerem o tym adresie IP oraz porcie, a w przypadku SocketServer jest inaczej...

konserwa
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:282
0

Daje po prostu odpowiednik c#'owego 'IPAddress.Any. Jakbyś w IP serwera wpisał 127.0.0.1 to czy koledzy mogli by sie podłączyć z tej samej sieci? Akceptuje po prostu na dowolnym adresie.


Przejdę, przejdę, myślał Red. Nie pierwszy raz, przecież przez całe życie właśnie tak, po szyję w gównie, a nad głową pioruny, zawsze tak było...
edytowany 3x, ostatnio: konserwa
orchowskia
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Zielona Góra
  • Postów:83
0

Tak w skrócie na chłopski rozum:
ServerSocket udostępnia port, Socket łączy się na port serwera.
Kiedy podajesz port w ServerSocket - udostępniasz port i klienci mogą się z Tobą skomunikować - jak wywołasz metodę accept bodajże to odbierasz to połączenie i możesz jakoś zareagować, np odesłać HTML strony czy cóś.
Metoda accept zwracała Socket do komunikacji zwrotnej o ile mnie pamięć nie myli. Ogólnie znając zasadę działania TCP to wydaje się logiczne :)
Odsyłam https://tools.ietf.org/html/rfc793#page-10

CS
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 16 godzin
  • Postów:296
0

Popatrz w dokumentację, SocketServer ma też konstruktor z 3 parametrami, w tym jeden z nich to adres IP interfejsu sieciowego na którym chcesz nasłuchiwać. I oczywiście możesz się połączyć z zewnątrz tylko podając "publiczny" adres tego interfejsu.

KU
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:60
0

A czy SocketServer przechowuje informacje na temat adresu IP komputera na, na ktorym został uruchomiony? W przypadku Socket po stronie kluenta podajemy IP serwera i port serwera, z którym chcemy się połączyć. Ale skąd SocekServer wie, że jest gniazdem tego konkretnego serwera, z którym klient żąda się połączyć?innymi słowy:

  1. Skąd program, który obsługuje obiekt SocketServer wie, że musi odpowiadać na dane żądanie klienta a na inne nie? (Zakładam że ma z tym.coś wspólnego numer portu)
  2. Skąd SocketServer wie z jakiego serwera ma pobrać informacje, których żąda klient? (Zakładam, że te informacje zawarte są w żądaniu klienta)

Jeżeli moje odp. na powyższe pytania są poprawne to nasuwa mi się wniosek, że jeden program z SocketServer uruchomiony na komputerze może połączyć klienta z dowolnym serwerem, zgadza się? (przynajmniej teoretycznie, jeśli ten serwer zechce odpowiedzieć)

  1. Więc co jeśli na danym komputerze bedą działać 2 programu obsługujące SocketServer ale z rożnymi.numerami portu? Nadal wszystko bedzie działać? Dwa żądania komunikujące się przez inny port do tego samego serwera nie wejdą w konflik?

Wybaczcie, może zadaje zbyt oczywiste pytania, ale jestem totalnie zielony jeśli chodzi o technologie internetowe i chciałbym dobrze ugruntować podstawy.

orchowskia
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Zielona Góra
  • Postów:83
0

Twój tok myślenia jest dobry. Klient łącząc się do serwera musi znać port usługi. Możesz sprawdzić że port 80 odpowiada za HTTP, a np 443 za poczte.

W TCP jest tzw. Handshake i tam negocjowe są kanały komunikacji. Klient też musi otworzyć swój port wysoki [powyzej 1024], wylosowany.

Potem w nagłówkach TCP wymieniane są wszystkoe te informacje. Żadania nie wejdą w konflikt.
Poczytaj o protokole TCP , UDP

orchowskia
W udp jest inaczej. Mam nadzieje że nic nie pokręciłem 😂

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.