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
>
>

Odpovedet emailem