[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