|
|
||||||
|
#1
|
|
|
|
|
Witam!
Pisze prosty komunikator na gniazdach i wątkach i napotkałem na problem przy pisaniu klienta (a może problem jest z serwerem). Testuję oba programy następująco: 1. odpalam serwer - pojawia się komunikat, że nasłuchuje na jakimś porcie, 2. odpalam klienta - serwer informuje o przychodzącym połączeniu z danego hosta 3. i teraz co się dzieje z klientem: Client.java public static void main(String[] args) throws IOException { Socket connection; connection = new Socket(SERVER_ADDR, LISTENING_PORT); new ConnectionHandler(connection); } ConnectionHandler.java public class ConnectionHandler extends Thread { //... ConnectionHandler(Socket connection) { this.connection = connection; System.out.println("Polaczono z serverem " + connection.getInetAddress().getHostName() + "na porcie: " + connection.getPort()); start(); } public void run() { try { out = new ObjectOutputStream(connection.getOutputStream()); out.flush(); in = new ObjectInputStream(connection.getInputStream()); do { //-- available zwraca 0 --// System.out.println(in.available()); try { //----> tu jest problem: w tym miejscu program staje, nie wiem co się dzieje ze strumieniem message = (String) in.readObject(); System.out.println("server>" + message); sendMessage("Hi my server"); //... } catch (ClassNotFoundException ex) { ex.printStackTrace(); } } while (!message.equals("bye")); } catch (IOException ex) { ex.printStackTrace(); } finally { //tarzyj slady i zwiewaj :) try { in.close(); out.close(); connection.close(); } catch (IOException ex) { ex.printStackTrace(); } } } W zaznaczonym miejscu klient staje, nie wiem co się dzieje ze strumieniem. Wiecie może w czym tkwi problem? Kiedy po takim "zawieszeniu" zamykam klienta. Serwer wywołuje wyjątek "SocketException: Connection reset". Pozdrawiam Tomek. |
|
|
|
#2
|
|
|
|
|
pon, 08 mar 2010 o 22:22 GMT, Czterysta Czwarty napisał(a):
> Witam! > > Pisze prosty komunikator na gniazdach i wątkach i napotkałem na > problem przy pisaniu klienta (a może problem jest z serwerem). Sorry ze nie wglebialem sie w pytanie, ale chcialem tak tylko wtracic, ze jezeli chcesz wygodnie i wydajnie oprogramowac komunikacje sieciowa, to polecam bilbioteke Apache MINA, na prawde jest bardzo przyjemna, jest bardzo elastyczna i daje mnustwo mozliwosci: jako taka zacheta: http://mina.apache.org/documentation.data/ACEU2007.pdf Znacie moze jeszcze jakies godne polecenia bilbioteki do tego typu? moze jeszcze cos lepszego od MINAy? Pozdrawiam Brzezi |
|
#3
|
|
|
|
|
Czterysta Czwarty wrote:
[ciach] > public void run() { > try { > out = new > ObjectOutputStream(connection.getOutputStream()); > out.flush(); A po co flush()? Jeszcze nic nie napisales. Moze tu jest problem? > in = new ObjectInputStream(connection.getInputStream()); > do { > //-- available zwraca 0 --// > System.out.println(in.available()); > try { > //----> tu jest problem: w tym miejscu program > staje, nie wiem co sie dzieje ze strumieniem > message = (String) in.readObject(); Nic sie nie dzieje. Klient czeka az serwer cos do niego napisze. ObjectInputStream bedzie tak dlugo probowal czytac, az uda mu sie zrobic z tego String. [..] > out.close(); > connection.close(); > } catch (IOException ex) { > ex.printStackTrace(); > } > } > } > > W zaznaczonym miejscu klient staje, nie wiem co sie dzieje ze > strumieniem. Wiecie moze w czym tkwi problem? Patrz wyzej. > > Kiedy po takim "zawieszeniu" zamykam klienta. Serwer wywoluje wyjatek > "SocketException: Connection reset". Znaczy prawdopodobnie: 1. Nawiazujesz polaczenie 2. Klient czeka az serwer cos napisze 3. Serwer nic nie pisze tylko czeka az klient cos napisze. 4. Ubijasz klienta i czekajacy serwer jest uwolniony przez SocektException. Czyli normalnie :) |
|
#4
|
|
|
|
|
On 9 Mar, 07:47, Michal Kleczek <klek> wrote:
> Nic sie nie dzieje. Klient czeka az serwer cos do niego napisze. > ObjectInputStream bedzie tak dlugo probowal czytac, az uda mu sie zrobic z > tego String. Głupi ja! :) Pisałem na podstawie kilku przykładów i nie zauważyłem, że i serwer i klient czekają na wiadomość. Dzięki za sugestię. |
|
#5
|
|
|
|
|
>> out = new
>> ObjectOutputStream(connection.getOutputStream()); >> out.flush(); > > A po co flush()? Jeszcze nic nie napisales. Zapisal wolajac konstruktor ObjectOutputStream. |
|
#6
|
|
|
|
|
jolz wrote:
>>> out = new >>> ObjectOutputStream(connection.getOutputStream()); >>> out.flush(); >> >> A po co flush()? Jeszcze nic nie napisales. > > Zapisal wolajac konstruktor ObjectOutputStream. Racja, zapomnialem o tej pulapce zastawionej przez Suna. |
|
|
| Podobne wątki | |
| Co zrobić ze zrippowanym strumieniem (Mplayer)? Mam kłopot z odtworzeniem fragmentów muzyki ściągniętych na dysk np. ze strony amazon.com (sample z płyt). Rippuje je tak: mplayer -dumpstream -playlist adres otrzymując w... |
|
| problem ze strumieniem Mam problem ze strumieniem Otóż muszę odczytac zawartość pliku do pewnego miejsca znak po znaku i jeśli zrobię to tak for (i=0; i < poz1+1;... |
|
| problem ze strumieniem znaków Witam szanownych grupowiczów Mam napisać program, który będzie poprawiał zadane ciągi znaków, i tak zamiast janKowalski ma być po korekcie Jan Kowalski. Potrafię... |
|
| Wycinanie elementów strumieniem wody Cześć, fajny wynalazek! ;-) Może zrewolucjonizować modelarstwo!!! [..] Pozdrawiam Piotr [..] |
|
|
Czasy w strefie GMT. Teraz jest 23:10. | Privacy Policy
|