[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