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