# Sockets und gzip



## sp19 (5. Nov 2008)

Hallo,
bin gerade frisch am Java lernen, also nicht böse sein wenn ich nicht gleich alles verstehe bzw. Anfänger fragen stelle 

Habe gerade kleines bsp. aus einem Buch gemacht, wo ich als Client nach Daten frage und vom Server gezipte Daten bekomme.

Also in etwa:

```
new GZIPInputStream( clientsocket.getInputStream());
```

Aber was ist, wenn ich das nicht so hardcodieren will, d.h. ich vorher nicht weiss ob der Server gzip sendet oder nicht.

Also ich mache ein request mit:

```
out.write("GET .........")
out.write(Accept-Encoding: gzip");
```

Wenn nun der Server gzip unterstüzen würde, dann steht ja im Header "content-encoding: gzip" und ich brauch einen GZIPInputStream. Wenn er kein gzip sendet brauch ich ja einen normalen InputStream.

Wie kann ich das unterscheiden? D.h. ich müsste doch schon bevor ich den Stream wähle, wissen ob nun gzip gesendet wird oder nicht.


thx
MFG
sp19


----------



## sp19 (5. Nov 2008)

hi,
ich nochmal.

kann es sein das ich dann erst mit dem normalen InputStream den header einlesen muss, danach auswerten und ggf. in den GZIPInputStream wechseln muss?

Ist das so eine richtige bzw. gute lösung, oder gibt es bessere?

was ich allerdings nicht weiss ist, wann der header zu ende ist, und ab wann die daten kommen...


----------



## tuxedo (5. Nov 2008)

Sieht mir stark nach HTTP aus.

Hab das bei mir damals so gemacht:


```
if (_urlConn.getContentEncoding()!=null && _urlConn.getContentEncoding().contains("gzip")) {
				if (DEBUG) System.out.println("gzipped input");
				GZIPInputStream is = new GZIPInputStream(_urlConn.getInputStream());
}
```

Wobei _urlConn vom Typ "URLConnection " ist...

Gruß
Alex


----------



## sp19 (5. Nov 2008)

ah, thx.
kannte diese klasse noch nicht, damit gehts aber recht einfach 

aber im allgemeinen sollte sowas auch mit sockets funktionieren, oder?
ich denk mal URLConnection verwendet intern auch nur sockets...oder?


----------



## tuxedo (5. Nov 2008)

Korrekt.

- Alex


----------



## Guest (5. Nov 2008)

sp19 hat gesagt.:
			
		

> was ich allerdings nicht weiss ist, wann der header zu ende ist, und ab wann die daten kommen...



ganz einfach: "\n\r"


----------



## tuxedo (5. Nov 2008)

?? Der Header hat mehrere Zeilen, ergo müsste es mehrere Zeilenumbrüche geben. Also reicht das abprüfen auf EINEN Zeilenumbruch nicht.

Nebenbei wurde das Problem schon durch den Einsatz von "UrlConnection" gelöst.

- Alex


----------



## Guest (5. Nov 2008)

ok dann korregiere ich...es ist CRLF :lol: 

der header ist immer (rfc) mit einer leerzeile von den daten getrennt.


und ein problem wurde hier nicht gelöst, da es nie eins gab. der themenstarter ist am java lernen, da ist es nicht förderlich fragen offen zu lassen in dem man auf andere klassen ausweicht.


aber wenns nicht gerade zum spielen ist, würde ich auch die HttpURLConnection nehmen...


----------



## tuxedo (5. Nov 2008)

So viel besser ist die Klasse HttpUrlConnection auch wieder nicht. 

Einen Anfänger anzuleiten (und auch nicht falsch und ohne weiteren Details/Erkläörungen) das HTTP Protokoll auf Clientseite selbst zu implementieren... Na ich weiß nicht. Ölwechseln lernt man ja auch vor dem Motor austauschen ...

Naja. Im Forum anmelden könnt dir als "Experten" ja auch nicht schaden ;-) Vielleicht lernst du ja noch was?

- Alex

P.S.

CRLF == \r\n != \n\r ... Aber das wusstest du sicher schon, oder?


----------

