anoniem Geplaatst: 23 januari 2005 Delen Geplaatst: 23 januari 2005 Hallo, ik heb een applicatie die direct van een socket een http request (GET) leest. De request heeft de onderstaande vorm, waarbij ik alleen geinteresseerd ben in de x variabele: http://mijnserver/give=x Als ik van de socket ga lezen op onderstaande wijze: [code:1:271b29e08c] final InputStream bis = socket.getInputStream(); final int avail = is.available(); System.out.println("available bytes "+avail); final byte[] bytes = new byte[avail]; for (int i = 0; i < avail; i++) bytes[i] = (byte) bis.read(); String str = new String(bytes); System.out.println("Get = "+str); [/code:1:271b29e08c] dan krijg ik wanneer ik de applicatie op Windows 2k draai, dan krijg ik het volledige HTML request te zien, waaruit ik vervolgens mijn GET variabele kan halen. Wanneer ik de applicatie op linux draai, dan lukt het niet, ik kan helemaal niets van de socket lezen!, de avail bytes variabele is 0!! Het zou toch helemaal niet uit mogen maken waarop ik mijn applicatie draai, de http request wordt toch gewoon altijd meeverzonden?? Iemand enig idee, of een beter idee om http requests van een socket te lezen? alvast bedankt. Quote Link naar reactie
anoniem Geplaatst: 7 februari 2005 Auteur Delen Geplaatst: 7 februari 2005 Het is misschien wel een idee om een System.out.println() neer te zetten als een client een socket aanmaakt. Als je deze println namelijk ziet weet je dat er wel connectie wordt gemaakt. Wat ik vermoed is dat er geen connectie wordt gemaakt omdat je firewall aan staat of een andere service al op deze poort draait. (als een andere service op deze poort draait krijg je als het goed is een BOUND exception). Als je die println niet te zien krijgt is je linux te streng ingericht, plaats dit bericht dan bij het OS Linux forum, die weten wel hoe ze dit moeten oplossen. Als je java applicatie werkt onder windows, werkt het ook onder Linux, heb ik zelf met een eigen geschreven webserver van mij geprobeerd. Hans Quote Link naar reactie
anoniem Geplaatst: 7 februari 2005 Auteur Delen Geplaatst: 7 februari 2005 het bleek niet te liggen aan een firewall, of aan de verbinding oid, er wordt namelijk altijd een connectie gemaakt. het probleem zat hem echter in het available() statement, deze retourneert niet altijd de correcte hoeveelheid beschikbare bytes. (ik vermoed hier een foutje in de jvm). Wanneer er 0 bytes available zijn dan is er soms gewoon data van te lezen. Ik heb het nu opgelost door gebruik te maken van gebufferde reader en dan gewoon net zolang uitlezen tot je niet meer kan. [code:1:d331953b7d]final InputStreamReader ir = new InputStreamReader(is); final BufferedReader br = new BufferedReader(ir); String str = null; while ((str = br.readLine()) != null) { .... }[/code:1:d331953b7d] Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen