[Java lista] tcp kliens nio-val
Zsombor
gzsombor at gmail.com
2007. Aug. 25., Szo, 22:37:00 CEST
On 8/25/07, Zidarics Zoltan <zamek at vili.pmmf.hu> wrote:
>
> hello,
>
> Szoval, ha open/get/close modon hasznalom, akkor mukodik, de ha nem akkor
> tolem (java prg) nem megy ki a keres.
>
> itt a kodreszlet:
>
> if (channel == null || !channel.isConnected())
> open();
> try {
> deviceReady = transmitDeviceData(); //
> kerest kikuldjuk
> if (WAIT_AFTER_TRANSMIT >
> 0) // varunk, amig a hw feldolgozza a kerest
> Thread.sleep(WAIT_AFTER_TRANSMIT);
> if
> (deviceReady) // ha kiment a keres
> olvassuk vissza a valaszt
> deviceReady = readDeviceData();
> }
> finally {
> // channel.close();
> }
>
> a channel egy SocketChannel. a transmitDeviceData() kuldi ki a kerest:
>
> protected boolean transmitDeviceData() {
> transmitBuffer.clear();
> transmitData.getTransmitData(transmitBuffer); // keret eloallitasa
> transmitBuffer.flip();
> try {
> int writes = channel.write(transmitBuffer);
> return writes > 0 ? true : false;
> }
> catch (Exception e) {
> return false;
> }
> }
>
> Ez mar nem megy ki masodszorra, csak akkor, ha minden keres utan close-al
> zarom a kapcsolatot. A masodik hivas utan a broken pipe exception-t kapok.
>
> Valami meg hianyzik, ugy erzi, hogy az elozo kuldes meg nem ment ki, vagy
> valami ilyesmi lehet.
Ha NIO-t használsz akkor arra figyelni kell, hogy nem feltétlenül megy el a
teljes buffer tartalma, úgyhogy az az ellenörzés, hogy az elküldött tartalom
több mint 0 nem jelent semmit. Illetve, ha nem ment el elsőre, akkor késöbb
meg kell hivni, újra a - félig meddig már elküldött - bufferrel. Pontosabban
ilyenkor Selector-t kell használni és ott figyelni az irhatóságra.
Egyáltalán, miért akarsz NIO-t használni, ilyen feladatra jóval könnyebb és
használhatóbb egy hagyományos blokkoló socketet igénybe venni.
Zsombor
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20070825/c5fba9cb/attachment-0001.html
További információk a(z) Javalist levelezőlistáról