Ga naar inhoud

Uitlezen http request in linux lukt niet! [java]


anoniem

Aanbevolen berichten

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.
Link naar reactie
  • 3 weken later...
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
Link naar reactie
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]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...