[Java lista] Socket broken

Schmidt András asch at freemail.hu
2008. Júl. 14., H, 13:13:52 CEST


Szia!

Eddig csak szinkron TCP sockettel próbáltam. Nekem az a tapasztalatom, 
hogy amíg nincs forgalom addig nem detektálják a kliensek a leszakadást. 
Ahhoz hogy legyen forgalom úgy kell felépítened a protokollodat, hogy 
időnként valami iamalive vagy ping üzenet azért menjen. Persze ez - más 
szempontból - felesleges forgalmat generál. Gondolom ezért nincs benne 
alapból.

Schmidt András


zamek wrote:
> Hello,
>
> Szetguglizom magam es nem talalok hasznalhato megoldast! :(
>
> Van egy tcp socket kliens-em, aminek detektalnia kellene, ha megszakad a 
> kapcsolat. Egyszeruen nem talalok mukodo megoldast. 
>
> Egyebkent rendesen mukodik, csak a szakadast nem veszi eszre.
>
> Amit probaltam:
> 1. Thread+NioSocket. 
> 	inicializalaskor beallitotm a timeout-ot.
>
> 	private void readIncomingMessages() throws IOException, 		         
> CharacterCodingException {
>         // check for incoming mesgs
>         // non-blocking select, returns immediately regardless of how many 
> keys are ready
>         readSelector.selectNow();
>         // fetch the keys
>         Set readyKeys = readSelector.selectedKeys();
>         // run through the keys and process
>         Iterator i = readyKeys.iterator();
>         while (i.hasNext()) {
>             SelectionKey key = (SelectionKey) i.next();
>             i.remove();
>             channel = (SocketChannel) key.channel();
>             readBuffer.clear();
>             // read from the channel into our buffer
>             long nbytes = channel.read(readBuffer);
>             // use a CharsetDecoder to turn those bytes into a string
>             // and append to our StringBuffer
>             readBuffer.flip();
>             StringTokenizer st = new StringTokenizer(
>                     asciiDecoder.decode(readBuffer).toString(), "\n\r");
>             while (st.hasMoreElements()) {
>                 processIncomingMessage(st.nextToken());
>             }
>             readBuffer.clear();
>         }
> }
>
> A while-ba be sem megy, nincs exception.
>
> 2. Apache Mina. Eszre sem veszi, ha megszakad a kapcsolat, nincs exception. A 
> doksija irja, hogy nem konnyu eszrevenni, nezzem meg a Quarz forrasat.
>
> Nem tudom elhinni, hogy ez egy ilyen oriasi problema! Vagy csak en benazok?
>
>   



További információk a(z) Javalist levelezőlistáról