[java]watki, komunikacja z konkretnym watkiem

0

czesc juz zakladalem ten temat kilka dni temu, ale chyba zostal usuniety lub zaginal bo zauwazylem ze ostatnio byly problemy z serwerem

mam napisana prosta aplikacje klient-serwer i musze odwolywac sie do konkretnego watku(klienta), niestety nie wiem jak zrobic zeby serwer przeslal pytanie do wybranego watku, ten watek odpowiedzial i podal serwerowi nazwe nastepnego watku do odpytania... chce zeby mogl odpowiedziec tylko wybrany watek... nie wiem jak wysylac pytanie tylko do wybranego klienta i jak zrobic zeby serwer rozpozal i gdziez zapisal informacje od ktorego klienta dostal odpowiedz....

w klasie dziedziczacej z Thread mam strumien wysylajacy wiadomosc do klienta, ale ta wiadomosc dostaja wszystkie uruchomione watki i wszystkie moga odpowiedziec, jak to zmienic zeby bylo wiadomo kto odpowiada

0

Wszystkie nowe wątki, ewentualnie sockety lub strumienie możesz dodawać do jednego Vectora. Wysłanie danych do klienta o wybranym numerze polegać będzie na pobraniu wątku z Vectora przez metodę elementAt(numer_obiektu). Musisz pamiętać o rzutowaniu.

0

mam 3 pliki:

ThreadServer.java - dziedziczaca z Thread, z niego odbywa sie wysylanie pytan, zawiera strumienie
Server.java - akceptacja nowych watkow
Client.java - wysylanie odpowiedzi

w pliku Server.java tworze Vector i jak mam wysylac wiadomosc do klienta jezeli strumien "doKlienta = new PrintWriter(gniazdoKlient.getOutputStream(),true);" mam w pliku ThreadServer.java, normalnie pisze tak "doKlienta.println(wiadomosc);"... nie wiem jak to wszystko placzyc ;/

0

Jeśli przychodzi klient to tworzysz nowy obiekt klasy ThreadServer następnie musisz go dodać do wektora. Jeśli chcesz wyslać wiadomość do wszystkich robisz tak:

for (int i=0; i<watki.size(); i++){
ThreadServer ts = (ThreadServer)watki.elementAt(i);
ts.wyslij("wiadomosc do wszystkich");
}
0

a jak chce wyslac wiadomosc do jednego klienta

0

Jeśli chcesz wysłać wiadomość do konkretnego klienta możesz zrobic tak:

ThreadServer ts = (ThreadServer)watki.elementAt(tu_numer_klienta);
ts.wyslij("wiadomosc do klienta");

Jeśli chcesz reagować na odpowiedź klienta na zadane pytanie to lepiej zrobić to w klasie ThreadServer, pod warunkiem że ThreadServer ma dostęp do listy pytań i odpowiedzi. Jeśli nie ma to trzeba mu ją udostępnić.

0

wielkie dzieki za odp. rozjasnilo mi to troche w glowie... pozniej ztestuje i znajac swoje zdolnosci jeszcze w tym topicu cos napisze ;]

pozdrawiam

0

Moze lepszym rozwiazaniem niz wektor bedzie mapa czy cos? Zalezy co chcesz uzyskac. Jest tez klasa ThreadLocal, mozesz zajrzec do API.

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