Dobrý den,
napadla me( jedna taková drobnost, která nás dost potrápila svého c(asu.
Z ne(jakého du*vodu, když Java be(ží na Windows, které mají ne(jaké
sít(ové adaptéry povolené ale nepr(ipojené, sít(ová komunikace se chová
"divne(". Ne(které pakety se proste( obc(as ztratí. Stac(í nepr(ipojené
adaptéry zakázat a zac(ne( to fungovat.
Není to nic co bych me(l podloženo seriozním zkoumáním, ale osobne( jsem
to aplikoval už 3x a vždy to vyr(ešilo problém nekorektního
nepochopitelného chování pr(enosu*.
S pozdravem
Lukáš Záruba
Dne 16.3.2012 23:07, arsi napsal(a):
> Zdravim pani!
>
> Pri vyvoji mojej novej aplikacie som narazil na zaujimavy problem v
> jave na Windows masinach.
>
> Celu vec som odladoval pod linuxom, dole mam C aplikaciu beziacu na
> routerboarde pod openWRT a ako konfiguracny soft je aplikacia pod
> netbeans platform cez, ktoru sa ten spodok konfiguruje.
> Ako protokol pouzivam jemne upravene Cckove XDR. Pridal som este pre
> istotu kontrolu CRC prenasanych dat.
>
> Vsetko fungovalo bez problemov aj vo Windows co mam vo virtual boxe
> pod linuxom.
>
> Ked som zacal ostre testy na masinach kolegov tak som zistil, ze mam
> problem.
>
> Na Windows masinach nahodne vznikal "End of stream exception" Tak
> nasledoval wireshark a kontrola paketov. Samozrejme vsetko bolo OK.
> Kontrola kodu bola tiez ok.
>
> Padalo to v tomto kode vzdy na inom mieste: (predtym poslem Ccku cez
> outputstream prikaz na odoslanie XDR dat)
>
> int id = inputStream.read() & 0xff;
> int x1 = inputStream.read() & 0xff;
> int x2 = inputStream.read() & 0xff;
> int x3 = inputStream.read() & 0xff;
> int c1= inputStream.read() & 0xff;
> int c2= inputStream.read() & 0xff;
> int c3= inputStream.read() & 0xff;
> int c4= inputStream.read() & 0xff;
>
> Tak som skusil pridat pred ten kod toto:
>
> while (inputStream.available()<8);
>
> A problem bol odstraneny.
>
> Este ma napadla vec, ze skusim zmerat cas kolko tam kod caka, plus som
> pridal timeout:
>
> long start=System.currentTimeMillis();
> while (inputStream.available()<8) {
> if((System.currentTimeMillis()-start)>3000){
> break;
> }
> }
> long end = (System.currentTimeMillis()-start);
> if(maxWait<end){
> maxWait = end;
> System.out.println(">max Head Wait:"+maxWait);
> }
>
> A fcul to najlepsie:
>
> Ubuntu 64bit maximalne 35ms
> Ubuntu 64bit virtual box Windows XP 32bit max. 35ms
> Windows XP 32bit komplet updaty max. 250ms
> Windows XP 32bit bez updatov max. 230ms
> Windows XP 64bit komplet updaty max. 210ms
>
> Este sa to chystam otestovat na win7.
>
> Z tohoto mi vychadza ze TCP sockety v jave su OK. Chyba je podla
> tohoto niekde na urovni network driverov vo windows. Asi tam je nejaky
> timeout. Protoze na Woknach pod virtualboxom to bezi bez problemov.
>
> Jo a este moje nastavenia socketu, ale skusal som zmenit uz asi fsetko ;)
> socket.setSoTimeout(5000);
> socket.setKeepAlive(true);
> socket.setTcpNoDelay(true);
>
>
> Arsi
>
>