[Java] Komunikator internetowy

wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[Java] Komunikator internetowy

Post autor: wawek91 »

Witam, odrazu zaznaczam, że wiem, że wiele jest tego typu tematów jednak żaden ze znalezionych mnie nie zaspokaja. Otóż przez święta mam napisać na zajęcia prosty komunikator internetowy. Wszystko niby ok, tyle że prowadzący podaje wytyczne co i jak nie dając żadnych wskazówek (nie wiem może za wiele wymagam :P). Dlatego zwracam się z prośbą do osób które może już kiedyś pisały swój komunikator, albo mają większe pojęcie na ten temat ode mnie. Zależy mi głównie na odpowiedzi na pytania:
-czy serwer i klient mają być w osobnych wątkach czy to mają być osobne projekty (np w eclipse), ponieważ spotkałem się, że były napisane w osobnych projektach, a słyszałem, że należy umieszczać jako oddzielne wątki w tym samym projekcie
-byłbym wdzięczny gdyby ktoś mi podsunął jakie metody powinien zawierać serwer a jakie klient
-nigdy wcześniej nie pisałem GUI, rozumiem, że zabieram się za nie dopiero jak cały program hula (czyt. na samym końcu)?

Tu krótka specyfikacja projektu:
Ukryta treść:    
Jeszcze ostatnie pytanie co oznacza 'zestawia sesje klienckie' i 'loguje ruch sieciowy' ? Nie oczekuję natychmiastowych 'na odwal się' odpowiedzi, ponieważ zamierzam się za to zabrać dopiero we wtorek. Jeśli ktoś ma jakieś przydatne linki czy coś w tym rodzaju to również będe wdzięczny.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Java] Komunikator internetowy

Post autor: Afish »

Mi to wygląda na 2 programy - jeden to serwer, drugi to klient. Za GUI weź się kiedy zechcesz, ale lepiej to zrobić na końcu, gdy wszystko jest już OK i można spokojnie walczyć z interfejsem. Logowanie ruchu sieciowego polega zapewne na zrobieniu prostego loga, kto kiedy się podłączył, z jakiego IP, z jakim nickiem itepe. Zestawienie sesji klienckich polega na moje oko na odpowiednim tłumaczeniu identyfikatorów na odpowiednie adresy IP i przekierowywanie wiadomości.
HaveYouMetTed
Użytkownik
Użytkownik
Posty: 270
Rejestracja: 19 wrz 2011, o 17:29
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 14 razy
Pomógł: 17 razy

[Java] Komunikator internetowy

Post autor: HaveYouMetTed »

komunikator w javie to chyba nie jest najlepszy pomysł.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Java] Komunikator internetowy

Post autor: Afish »

Dlaczego?
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[Java] Komunikator internetowy

Post autor: wawek91 »

Afish, widzę, że się orientujesz więc mógłbyś mi conieco podpowiedzieć jak się za to zabrać? Najpierw napisać serwer później klient czy na odwrót czy równocześnie oba pisać? Jedyne co znalazłem w miarę pomocnego to tu pozycja 'Praca w sieci'. Czy te programy mają być zrobione coś na kształt tego co tam?
HaveYouMetTed, zajęcia prowadzone są w Javie więc wyboru nie mam, a czy to dobry pomysł czy nie, nie wiem, ale mając pojęcie o C i C++ po poprzednim roku wydaje mi się, że Java ma do tego lepsze podejście
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Java] Komunikator internetowy

Post autor: Afish »

Tutaj znajdziesz najważniejsze informacje: ... erver.html
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[Java] Komunikator internetowy

Post autor: wawek91 »

Jeszcze takie pytanie na zaś. Ponieważ w tym linku który podałem jest przykład klienta i serwera który odpisuje temu samemu klientowi który zadał mu zapytanie. Jak jednak zrobić, żeby serwer przekazywał komunikat od jednego klienta do drugiego (na innym komputerze)?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Java] Komunikator internetowy

Post autor: Afish »

Musisz podtrzymywać połączenie z każdym klientem i wysyłać mu odpowiednie dane. Na początek wystarczy, jak dla każdego połączenia przychodzącego do serwera zrobisz nowy wątek i zapamiętasz je w jakiejś ArrayLiście.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[Java] Komunikator internetowy

Post autor: wawek91 »

Ok po znalezieniu motywacji coś zaklepałem, wydaję mi się, że jest tak jak powiedziałeś tzn stworzyłem arrayliste do której zapisuję wątki połączeń przychodzących. Czym powinienem się zająć dalej? I tak na offtopicu mam pytanie jak w eclipse wyexportować do jara? Próbowałem file->export->jar ale kiedy tak zrobię to pojawia mi sie później błąd couldn't find the main class. Szukałem w google jak to rozwiązać jednak natrafiałem na same zagraniczne strony i niezbyt było mi to pomocne. Chce stworzyć jara, żeby go wysłać bratu a ten na swoim komputerze spróbował podłączyć się do mojego serwera. Krócej mówiac chce sprawdzić czy faktycznie moze się połączyć wielu klientów a nie tylko jeden.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Java] Komunikator internetowy

Post autor: Afish »

Czym? Serwerem, czyli odpowiednim dostarczaniem wiadomości. W eclipsie eksportuj do runnable jar file, ewentualnie ręcznie popraw manifest.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[Java] Komunikator internetowy

Post autor: wawek91 »

Ok czyli jeśli dobrze rozumiem wybieram file->export->runnable jar file i zaznaczam co chce exportować jednakze potem chcąc uruchomić (bo taki jar moge uruchomić dwuklikiem tak?) wyskakuje error could not find the main clas... Czyli to samo co wcześniej. Właśnie cos czytałem o tym manifeście, jednak gdzie on sie zapisuje i co to znaczy poprawić go ręcznie?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Java] Komunikator internetowy

Post autor: Afish »

wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[Java] Komunikator internetowy

Post autor: wawek91 »

Afish, byłem wcześniej na tej stronie jednak kompletnie nie rozumiem o co w tym chodzi. Exportując do runnable jar file to wogóle nie widzę opcji żeby stworzyć manifest, taka opcja jest przy exportowaniu do zwyklego jar file. Wtedy mogę zaznaczyć opcję wygenerowania manifestu, który w przypadku gdzie klasą która zawiera main jest klasa Serwer.class manifest wygląda tak:
Manifest-Version: 1.0
Main-Class: Serwer
Jeśli wiesz co mam zrobić to po prostu powiedz bo pół dnia już nad tą durnotą spędziłem i nadal nie wiem co moge jeszcze innego zrobić. Nie wiem, moze o zawarcie classpath chodzi? Czy to mam umieścić w manifeście? Jesli tak to co mam umieścic po znaczniku classpath?

Edit:
Jakimś cudem udaje mi się odpalić ale w cmd wpisując java -jar nazwapliku.jar co nie do konca było moim założeniem. Jednak mam pytanie. Jeśli chce żeby do serwera podłączył się ktoś z innego komputera to wystarczy że ja na swoim odpalę program serwera czy ten ktoś na swoim komputerze też powinien odpalić program serwera, a dopiero później klienta?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Java] Komunikator internetowy

Post autor: Afish »

Nie jestem w stanie pomóc Ci bardziej z manifestem z kilku powodów: nie wiem, jaki masz projekt w eclipsie, mało używałem eclipse'a (bardziej polegałem na automatycznej konfiguracji, niż sam coś zmieniałem). Na upartego możesz rozpakować jara (jar to zwykły plik zip bez kompresji), poprawić odpowiednio manifest, potem znowu spakować do zipa, zmienić rozszerzenie i po sprawie.
Co do serwera, to odpala go tylko jedna osoba - to ma działać jak strona internetowa. Ona jest na jednym komputerze, a inni przy użyciu klienta podłączają się do serwera i wymieniają dane.
ODPOWIEDZ