czekanie na polaczenie wiesza program

0

Witam,

mam do napisania aplikacje sieciowa. Klient po zalogowaniu otrzymuje liste aktywnych uzytkownikow i.. albo sam do nich cos wysyla (konkretna wiadomosc), jednoczesnie powinien odbierac do niego wysylane komunikaty.

W takim razie po zalogowaniu klient zaczyna nasluchiwac na konkretnym porcie.. I tu sie pojawia problem. stworzylem sobie metode nasluch() ruszajaca z potwierdzeniem zalogowania.

Teraz.. chcialbym zeby ta metoda jakkolwiek dzialala w tle, ktora wyglada mniej wiecej tak:

try {
            servertcp server = new servertcp(porcik); 
            naglowek=server.startListening();
            
            if (naglowek[1].equals("Who")) who(naglowek);

        } catch (Exception e) {
            e.printStackTrace();
        } 

no i server.StartListening(); zaczyna nasluch, po odebraniu komunikatu zwraca tablice stringow bedaca komunikatem..

majac juz to na podstawie tresci komunikatu tutaj wywoluje sobie jakas metode XXX (tutaj np who).

Teraz.. zeby po odebraniu pierwszego komunikatu klient nasluchiwal dalej zapetlam to... i program przyjmuje komunikaty.. ale nie rusza sie dalej, bo czeka na kolejne i kolejne i kolejne.. w rezultacie "Wisi".

prawde mowiac nie wiem co dalej..
moze jest jakis 'timer' ktory co jakis czas sprawdza czy jest polaczenie? tzn.. socket.accept() z odpowiednim timeoutem zeby sie nie wieszalo ;)

0

co pewien czas odpalaj albo w wątku to trzymaj albo co pewien czas odpalaj wątek nasłuchu

0

fragment servertcp:

class servertcp  {
    private ServerSocket ssocket; // do nasluchu
    private int port; // nr portu

     public servertcp(int aport) throws IOException {
        port = aport;
        ssocket = new ServerSocket(port);
    }
         public String[] startListening() {
      Socket socket = null;

      try {
          socket = ssocket.accept(); //czekaj na polaczenie

....

zamiast socket=ssocket.accept(); ktory w tym miejscu staje i czeka...
jest jakas metoda ktora sprawdza czy ktos chce sie polaczyc? cos nazasadzie

if (ktos_chce_sie_polaczyc) socket = ssocket.accept();
else break;
0
  1. takie rzeczy to tylko w wątkach.
  2. http://java.sun.com/j2se/1.5.0/docs/api/java/net/InetAddress.html#isReachable(int) od javy5 taka namiastka pinga
0

server powinien mieć swój wątek w którym oczekuje na połączenia, kiedy ktoś się połączy tworzy nowy wątek do obsługi tego połączenia i wywołuje jakieś zdarzenie w stylu OnConnect, w odpowiednich momentach jakieś OnDisconnect czy OnSendData itp itd etc

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