Watki klientow sieciowych a komunikacja pomiedzy klasami?

0

Witam, mam taki problem. Chce zrobic komunikator. Mam między innymi dwie klasy: klasa okna (rozszerza JFrame), oraz klasa dla gniazdka (rozszerza Thread). W klasie okna mam całe GUI, ActionListenera, natomiast w klasie dla gniazdka mam zdefiniowane:

gniazdo = new Socket(host, port);
wyjscie = new ObjectOutputStream(gniazdo.getOutputStream());
wejscie = new ObjectInputStream(gniazdo.getInputStream());

oraz w metodzie run() obsługuję całą komunikację (readObject, writeObject).

I teraz pytanie, jak to zrobić, aby to, co wpisuję w klasie z GUI, szło do klasy z gniazdkiem, a następnie się wysyłało dalej (na serwer).
Próbowałem to zrobić w ten sposób:

private volatile boolean komenda = false;
private String s_komenda;

public void wyslijKomende(String s_kom) {
	s_komenda = s_kom;      
	komenda = true;
}

public void run() {
try {
    while(true) {
          if(komenda) {
               wyjscie.writeObject(komenda);
               komenda = false; // tutaj jeszcze robilem sprawdzanie, czekalem na odpowiedz, 
                                // aczkolwiek to miejsce w kodzie sie nigdy nie uruchamialo
           }		
     }
} catch(Exception e) {}
}

Ale ten sposób nie działa... Jak to zrobić? Albo co jest źle w moim rozumowaniu? Z góry dzięki na podpowiedzi.

1

Stwórz sobie w klasie wątku LinkedBlockingQueue i używaj jej metody put() (zdaje sie) to wstawiania rzeczy do wyslania a watek niech sobie powoli pobiera z tej kolejki (take()) i wysyla.

1

Ok. Na sucho.
Powinieneś zmienić założenia:
Mam dwa pogramy, które mają gadać ze sobą i przesyła tekst między sobą.
Komunikacja P2P. Tworze program:
Uruchamiam wątek, który ma w sobie serversocket i nasłuchuje przychodzących połączeń.
Jeśli user chce rozpocząć rozmowę z kimś innym jego program używa socket do zawołania serrversocketa docelowego programu.
Dziej się to np. przy otwarciu nowego okienka.
W tym momencie zawołany serwer tworzy nowy watek, w którym tworzy socket.
Z tego socketu bierzemy Inputstream i outputstream.
Z inputstreama czytamy w while'u tekst - nie uzywamy objectinput streama, tylko jakiegos np. bufferedreadera.
Jednocześnie wysylamy dane, ale tylko jak user tego chce, czyli nie robimy while, tylko po nacisnieciu np. entera wysylamy do outputstreama.
Po drugiej stronie analogicznie. Czytamy w while'u, wysylamy na enter.

Przeczytaj jakbyś nie zrozumiał czegoś, to zapytaj.
2h roboty i powinno być gotowe.

Pozdrawiam.

0

Dzięki wielkie. Zrobię tak jak mi doradziłeś.

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