[java] Sockety. Klient - Serwer

Witam. :slight_smile:

Piszę tutaj ponieważ od jakiegoś czasu zastanwia mnie pewne zagadnienie i do tej pory nie znalazłem na nie odpowiedzi.

Jak w temacie, interesuje mnie komunikcja Klient - Serwer oparta na Socketach.

Mam program klienta i program serwera, wrzucona na serwer (testuje wszystko na darmowym cba.pl). Mam problem z połączeniem się z serwerem.

Gdy testowałem te programy na własnym komputerze używałem do tego wiersza poleceń i komendy" java" i wszystko działało.

Nie wiem natmiast jak to wyglada gdy program serwera jest umieszczoby na serwerze w sieci. Też trzeba go uruchomić, aby się połączyć? Jeśli tak to w jaki sposób?

Za wzór wziąłbym np gry na kurniku, lub czat na interii. Tam aplety mają połączenie z serwerem 24h na dobę (w końcu na kurniku można pograć o kazdej porze ;p). Czy ja również mógłbym coś takiego uzyskać?

Pozdrawiam :wink:

Część serwerową musisz napisać jako serwlet i umieścić na hostingu mającym na pokładzie kontener serwletów (np. Tomcat). Darmowe hostingi tego typu nie są niestety zbyt popularne, ale całość da się przystosować do darmowego konta Google App Engine.

W internecie znajdziesz od groma informacji o serwletach, a z dokumentacji GAE dowiesz się, co dalej.

Niekoniecznie. W przypadku zwykłej komunikacji opartej na gniazdach (socketach) wystarczy wrzucić aplikację na serwer i po prostu uruchomić z konsoli, np.

java MojaKlasa

java -jar MojProgram.jar

Tylko na serwerze musisz mieć otwarty port, na którym nasłuchujesz, bo inaczej po prostu nie uda ci się połączyć z aplikacją.

Ale z wiersza poleceń chyba nie da sie tego zrobić. Od tego chyba jest program putty. Czy można zrobić to jeszcze w inny sposób ?

Co do portów to nie wiem jakie udostępnia cba.pl o ile udowstępnia jakieś. A gdybym wykupił płatny serwer mógłbym korzystać z portów bez ograniczeń? Oczywiście wygluczając te, które są wykorzystywane do usług.

Pozdrawiam :slight_smile:

Czy Ty w ogóle masz pojęcie, o czym mówisz? W jaki inny sposób proponujesz odpalić aplikację na serwerze, niż przez wiersz poleceń? Głośno krzyknąć “uruchom Apache’a, proszę!”? :o PuTTY jest klientem Telnet/SSH. Jeśli masz dostęp do serwera przez ssh, to właśnie w ten sposób łączysz się z serwerem i uruchamiasz aplikacje, skrypty, konfigurujesz serwer itp.

Zacznijmy od tego, że na cba nie odpalisz na serwerze żadnej własnej aplikacji, niezależnie od tego czy jest napisana w Javie, C++, Pythonie czy bashu. Nie masz nawet dostępu po ssh. Jeśli kupujesz hosting, na którym możesz stawiać serwery napisane w Javie, to dostawca takiej usługi powinien udzielić Ci wszystkich informacji.

Jeśli poszukujesz serwera na którym będziesz mógł odpalić swoje aplikacje to termin VPS wpisany w google powinien zaspokoić twoje potrzeby.

Vps obowiązkowo. Polecam tu exone.pl - fajne mają całkiem vps-y (brat ma)

Kolega zapytał o to jak stworzyć/uruchomić prosty program w architekturze klient serwer oparty na soketach. Widać, że nie ma o tym dużej wiedzy ale może akurat ciekawi go to i zaczepi się w programowaniu przez te sockety… Serwlety, aplikacje webowe wdrażane na Apache Tomcat, do prostej komunikacji opartej na socketach nie potrzebne Ci to.

  1. Potrzebny jest:
  • serwer

  • z jvm aby można było w ogóle uruchomić aplikację Javy

  • z możliwością zbindowania się z jakimś portem (np 8080 czy innym dowolnym który przepuścił admin), który w razem z adresem serwera będzie osiągalny ze świata (lub z sieci z której łączyć się będą klienci)

  • dostęp do tego serwera: fizyczny, SSH, pulpit zdalny, admin kopiujący nasze komendy w konsolę z palca (oftp. tak w jednej firmie konfigurowałem jakiegoś toola :lol: )

  • klient

  • posiadający dostęp sieciowy do serwera przez adres oraz port z którego serwer korzysta. Jak to sprawdzić?

    telnet

    // jeśli aplikacja na serwerze chodzi ma połączyć

  1. Komunikacja jest prosta: java.net.ServerSocket na serwerze a java.net.Socket na kliencie. Chyba to już wiesz skoro próbowałeś lokalnie i działało. Jeśli nie rozumiesz idei poczytaj o komunikacji TCP w Javie bądź poproś o jakiś prosty kod z przykładowym serwerem i klientem.

To tyle…teraz wszyscy myślą: aleś pan mądry, specyfikację serwera dał a namiarów nie. Spokojnie, serwera dedykowanego nie proponuję. Jeśli znasz podstawy pracy z systemem linux (poprzez terminal, nie klikanie po unity w ubuntu) to polecam usługę typu PaaS oferowaną przez RedHat o nazwie: OpenShift.

Na OpenShift tworzysz konto, dodajesz nowy projekt, ignorujesz możliwość automatycznego użycia w projekcie wielu ciekawych narzędzi (JBoss AS7, MySQL, Postgres) poprzez wybranie projektu DIY (do-it-yourself). Po chwili dostajesz dane do logowania SSH na szybki, czysty serwer, na którym masz Javę i możesz zbindować się z 8080 który później widoczny jest ze świata jako port 80. Tam odpalisz serwer bez problemu. A klient? Najlepiej z domowego kompa albo kolejny projekt na OpenShift. A i nie myśl że wpadniesz na OpenShift i w 3 min dojdziesz jak działa. Polecam ich kanał na YT.

Pozdrawiam, cinekcnx.