Przesyłanie wiadomości z servera do clienta.

0

Witam, na podstawie kodu znalezionego w internecie stworzyłem server i clienta. Komunikują się one za pomocą NIO. Właściwie to komunikacja polega na tym, że informacja wysłana z clienta jest poprawnie odczytywana przez server, jednak w drugą stronę już tak pięknie nie jest. W związku z tym prosiłbym o wskazówki w jaki sposób mogę uporać się z tym problem. Poniżej zamieszczam kod źródłowy obu klas:
client - http://4programmers.net/Pastebin/5472
server - http://4programmers.net/Pastebin/5473

0

Ale nada się jako podstawa do komunikacji między serverem, a klientem, czy istnieje jakieś bardziej wydajne, lepsze rozwiązanie? Zależy mi na przesyłaniu danych z servera do klienta i vice versa, dla pewnej określonej liczby klientów. Oczywiście obsługa wielu klientów jednocześnie jest wymagana, ponieważ moim produktem końcowym miałaby być prosta gra karciana online dla kilku użytkowników.

0

Cieszę się, zatem wracając do meritum - czy ktoś zna rozwiązanie w jaki sposób najlepiej by było przesyłać również informację w drugą stronę, z servera do clienta? Ponieważ tak jakby praca metody send(), czy read() jest ciągła i wywołanie ich po sobie doprowadza do tego, że wykonywana jest tylko ta pierwsza. Można użyć jednej metody w drugiej, ale wtedy ta wywołana wewnątrz również się nie kończy i tym samym dalszy ciąg metody wywołującej drugą nie jest wykonany. Kod - Pastebin

0

Sorry, kod się nie wkleił. Właściwa wersja - http://4programmers.net/Pastebin/5479

0

Można oczywiście wywołać metodę send() w pętli while metody read(), będzie wysyłało i odczytywało. Tylko nie wiem, czy to jest dobry pomysł, czy raczej myśleć nad innym rozwiązaniem?

0

Znalazłem taką implementację servera i clienta - http://techwiki.ordak.org/index.php?title=How_To_Write_A_Multi-Threaded_Client-Server_Communications_in_Java#See_Also Wszystko działa poprawnie z serverem i jednym klientem - ClientDemo, jednak gdy tworzę dodatkowego klienta ClientDemo2 z kodem źródłowym ClientDemo, to już drugi klient nie zostaje obsłużony. I teraz pytanie, czy ktoś ma jakiś pomysł dlaczego? Server niby powinien przydzielić każdemu klientowi wątek, a jednak tak nie jest.

0

Niby powinien przydzielić a nie przydziela. Ten serwer jest jednowątkowy - nigdzie nie jest tworzony nowy wątek. Implementacja klienta też jest zła. Zamiast kopiować losowe kawałki kodu z internetu polecam na dobry początek:
Wątki: http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
Sockety: http://docs.oracle.com/javase/tutorial/networking/sockets/index.html
W rozdziale o socketach jest nawet przykładowa implementacja wielowątkowego serwera.

0

Dobra, napisałem server obsługujący wiele klientów tworząc dla każdego użytkownika nowy wątek. Czy ktoś może polecić jakieś materiały do nauki związane z obsługą wątków? W grze będzie brała udział większa liczba osób i nie wiem zbytnio jak się przełączać między nimi, aby dany gracz mógł wykonać swój ruch, wtedy pozostali czekają itp.

0

Znalazłem książkę Java, współbieżność dla praktyków. Czy dostanę coś lepszego, jeśli zamierzam zrealizować to, co opisałem w poście wyżej?

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