[Java lista] tcp kliens nio-val
Zidarics Zoltan
zamek at vili.pmmf.hu
2007. Aug. 25., Szo, 21:57:39 CEST
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.
Kornyezet: Debian Linux testing/2.6.21.5 kernel,
java:
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)
2007. augusztus 25. 20.08 dátummal Zsombor ezt írta:
> On 8/25/07, Zidarics Zoltan <zamek at vili.pmmf.hu> wrote:
> > hello,
> >
> > Az a feladatom, hogy egy adott tcp porton egy celhardware-rol lekerdezzek
> > adatokat. Gondoltam, ennel egyszerubb feladat nincs is, pedig... :(
> >
> > Eloszor egy elvi kerdes:
> >
> > Az osszes client mintapelda ugy mukodik, hogy connect, lekerdezes,majd
> > close;
> > Hogy lehet olyant csinalni, hogy ne kelljen foloslegesen kiepiteni es
> > lebontani a kapcsolatot? Masodpercenkent legalabb 10x kell lekerdeznem,
> > minek
> > gyotorjem a celhardware-t es a gepet?
> >
> > Van valakinek erre egy mukodo peldaprogramja?
>
> Biztos nem értem a kérdést, de ha Te is látod, hogy ez a sorrend,
> connect/lekérdezés/close, akkor mi akadályoz meg abban, hogy csak a
> lekérdezés részét iteráld? Persze nem tudom, hogy az adott célhardware
> protokolja milyen, de talán támogatja ezt a viselkedést is.
>
> Zs
udv,
--
Zoltan Zidarics programmer
PTE University Pecs, Hungary
icq: 43288694
További információk a(z) Javalist levelezőlistáról