Archiv verlassen und diese Seite im Standarddesign anzeigen : Socket(Java)
ich bastel gerade so ne art http proxy
browser schickt request zum proxy
sprich das programme ließt vom socket den request vom browser
zur zeit erfolgt das lesen in einer while(true) schleife
mit der abbruchbedingung
line.equalsIgnoreCase("Proxy-Connection: close") ||
line.equalsIgnoreCase("Proxy-Connection: Keep-Alive")
aber bei post würde danach noch daten gesendet werden die somit verloren gehen
nun meine frage:
woher weiß ich wann ich das lesen beenden kann? (ich weiß ja vorher nicht die große der daten die der browser auf den socket schreibt)
vielleicht hat ja jemand auch ne ganze andere idee?
Hi,
soweit ich mich entsinnen kann, enthält der HTTP Request Header ein Feld 'CONTENT_LENGTH', in dem steht, wie lang der Inhalt des Request (also der Post Daten) ist. Du mußt also zuerst den gesamten Header einlesen und die einzelnen Felder parsen. Danach weißt du, wie viele Bytes du noch zu lesen hast. Der Header ist übrigens zu Ende, wenn man eine Leerzeile gelesen hat. Danach folgen dann direkt die POST Daten.
Interessant ist vielleicht noch die Methode 'available' aus der Klasse InputStream. Mit dieser Methode kannst du auslesen, wie viele Bytes gerade am Socket bereitstehen um gelesen zu werden.
Gruß
almoeli
peschmae
17-06-2003, 08:03
ausserdem liefert die Methode read(byte[]) von InputStream jeweils -1 wenn der Stream zu Ende ist:
If no byte is available because the stream is at end of file, the value -1 is returned; otherwise, at least one byte is read and stored into b.
MfG Peschmä
das mit der read methode und -1 hatte ich schon probiert
das klappt in dem fall nicht
ich setzt die lösung aber beim lesen der antwort vom webserver zum proxy ein
da fragt sich nur warum das beim lesen vom browser zum proxy nicht klappt?
die anregung von almoeli guck ich mir später an :)
dank euch 2 erstmal
kommando zurück
das is browserabhängig
mit links funktioniert die available() methode gut aber mit opera zB nicht
da der rückgabewert immer 0 ist, dafür funktioniert bei opera, die read() methode und das lesen solange der rückgabewert nicht -1
scheinbar gibts da keine allgemeine lösung :)
anda_skoa
18-06-2003, 16:02
Du kannst ja das lesen im einem extra Thread machen, solange, bis eine Exception kommt, oder read -1 returned.
Ich hab da mal für einen TCP Forwarder eine StreamPipe geschrieben, die von einem InputStream liest und auf einem OutputStream schreibt, bis einer von den beiden geschlossen wird.
Hin und wieder sollte man von außen eine Methode aufrufen, die dann available() am InputStream aufruft, um sicher zu gehen, dass der lesende Thread "befreit" wird (manchmal blockiert das read wenn zwischendrinn geschlossen wird)
Ciao,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.