[Java lista] Socket broken

biziclop biziclop at gmail.com
2008. Júl. 14., H, 13:37:10 CEST


A TCP kapcsolat bezarasanak passziv figyelese altalanossagban nem
megoldhato. Vagy timeoutot hasznalsz, vagy folyamatos tesztforgalmat
vagy mindkettot.

(Elvileg elofordulhat az az eset is, hogy a tuloldal minden jelzes
nelkul meghal es minden tovabbi csomag, amit kuldesz neki, elnyelodik
a semmiben.)

lsp


2008/7/14 Schmidt András <asch at freemail.hu>:
> 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?
>>
>>
>
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>


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