Ende von Stream bei HTTP-Request

Status
Nicht offen für weitere Antworten.

m@nu

Bekanntes Mitglied
hallo zusammen

zur persönlichen belustigung schreib' ich momentan einen kleinen http server.
nun bin ich auf ein problem gestossen, welches ich bis anhin nicht kannte.

wenn ich einen request per browser (FF2) an meinen server sende, "reisst" der inputstream scheinbar solange nicht ab, bis ich auf "abbrechen" in meinem browser klicke. dementsprechend wird der ganze request von meinem server auch nicht (direkt) verarbeitet.

hier der code meines client-threads:
Code:
/*
 * Created on 16.05.2007
 */
package net.msites.gate;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;


/**
 * @author Manuel Alabor
 * @version 1.0
 */
public class Client extends Thread {

    private Socket client;
    
    public Client(Socket client) {
        super(client.getRemoteSocketAddress().toString());
        this.client = client;
    }
    
    @Override
    public void run() {
        try {
            /* Input: */
            InputStreamReader in = new InputStreamReader(client.getInputStream());
            
            StringBuffer string = new StringBuffer();
            char[] buffer = new char[1];
            int l;
            while((l = in.read(buffer)) != -1) {
                string.append(buffer);
            }
            
            System.out.println(string.toString());
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

was mache ich in meiner verarbeitung falsch?
irgendwie scheint es mir ja auch logisch, dass der browser die verbindung noch aufrecht erhält (keep-alive hat der auf 300) ...
vor jahren mit VB6 :)autsch:) war das aber überhaupt kein problem. konnte trotzdem alles verarbeiten.

kennt jemand diese problematik?

besten dank im voraus & grüsse
m@nu
 

m@nu

Bekanntes Mitglied
hab jetzt mal folgendes am ende der schleife eingebaut:
Code:
                lastChars[0] = lastChars[1];
                lastChars[1] = lastChars[2];
                lastChars[2] = lastChars[3];
                lastChars[3] = buffer[0];
                
                if(lastChars[0] == 13 && lastChars[1] == 10
                   && lastChars[2] == 13 && lastChars[3] == 10) {
                    in.close();
                    break;
                }

lastChars ist ein 4-er char-array.

funktioniert soweit... problematisch wird das ganze einfach, wenn von einem browser nicht die entsprechenden escape-zeichen für eine leere zeile verwendet werden (zb. nur \n statt \r\n)

ist dies wirklich die lösung oder gibts da noch was anderes?
 

Petroy

Mitglied
Da wird dann aber nur der Header eingesen. Ich würde gerne das ganze Request einlesen. Ist das auch irgendwie möglich?
 

Dante

Bekanntes Mitglied
hi,

sofern ein request einen body hat, muss die länge dieses bodys imho als content-length-header mitgeliefert werden. damit wüsstest du dann wie lang der ist. kann auch sein, das es da die möglichkeit von zwei leerzeilen gab um das ende zu markieren. am besten schaust du mal etwas in die doku von http/1.1

andere möglichkeit: nur http/1.0 annehmen, da gibts kein keep-alive.

header werden in http immer mittels \r\n getrennt, nur \n gibts nicht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Socket, Ende Dateitransfer Netzwerkprogrammierung 4
1 SSH-Kommunikation - Ende eines Streams nicht erkenntlich Netzwerkprogrammierung 2
K Ende eines HTTP Response/Request Netzwerkprogrammierung 6
G Sockets und HTTP: Ende des Datenempfangs erkennen Netzwerkprogrammierung 3
K "Ende eines Sockets" Netzwerkprogrammierung 9
U Ende eines Inputstreams ermitteln Netzwerkprogrammierung 3
M Ende des Streams ohne Schließen/Checksumme mitsenden Netzwerkprogrammierung 2
D Timeouts ohne Ende bei SMTP und FTP Netzwerkprogrammierung 3
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
E Socket Werte mit DataInput- und Output- Stream übergeben Netzwerkprogrammierung 1
T MP3 Dateien Stream Netzwerkprogrammierung 3
C Byte Stream dekodieren Netzwerkprogrammierung 7
G Video aus RTSP Stream speichern Netzwerkprogrammierung 8
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
A versch. Daten im Stream erkennen Netzwerkprogrammierung 2
E stream speichern Netzwerkprogrammierung 5
S Dateitransfer - kein end of stream Netzwerkprogrammierung 5
M RTP Stream überprüfen... Netzwerkprogrammierung 4
K ein Thread pro Stream Netzwerkprogrammierung 2
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
B Pdf Stream von Servlet mit itext Netzwerkprogrammierung 12
K End of stream, BufferedInputStream Netzwerkprogrammierung 4
A Icecast / SHOUTcast MP3 Stream / icy-metaint Netzwerkprogrammierung 3
Kr0e Simpler HTTP Stream server Test Netzwerkprogrammierung 3
H String Array durch einen Stream schicken. Netzwerkprogrammierung 4
lacyuu Warum empfängt mein Stream keinen Input? Netzwerkprogrammierung 4
lordcarlos Erstes TCP programm - output stream problem Netzwerkprogrammierung 2
dayaftereh Bester Stream für ein Spiel? Netzwerkprogrammierung 15
N Socket Stream Schicken Netzwerkprogrammierung 13
N Socket Stream in String Netzwerkprogrammierung 4
M Bytes aus Stream lesen Netzwerkprogrammierung 3
J byte[] auf Stream schreiben Netzwerkprogrammierung 2
M ich habe ein stream problem Netzwerkprogrammierung 7
S Schnellster Stream Netzwerkprogrammierung 20
V Mehrere Streams durch einen Stream senden Netzwerkprogrammierung 14
W Was für ein Stream soll ich verwenden? Netzwerkprogrammierung 8
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
A java.io.StreamCorruptedException: invalid stream header Netzwerkprogrammierung 2
C invalid stream header Netzwerkprogrammierung 2
T Stream de-multiplexen Netzwerkprogrammierung 2
J gzip Stream weiterleiten Netzwerkprogrammierung 3
C Problem mit Object-Stream Netzwerkprogrammierung 3
N TCP Stream auslesen Netzwerkprogrammierung 7
André B. Stream Bridge? Netzwerkprogrammierung 2
P Verschiedene Daten über einen Stream Netzwerkprogrammierung 4
T Musik-Stream: Server sendet die Datei zu schnell ? Netzwerkprogrammierung 3
N InternetRadio-Stream umleiten Netzwerkprogrammierung 2
G Writer oder Stream bei Socket? Netzwerkprogrammierung 2
G Datei über HTTP Stream senden Netzwerkprogrammierung 4
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
O HTTP Wer hilft mit meinem UTF-8 http Request ? Netzwerkprogrammierung 1
G localhost im Backend https vs. http Netzwerkprogrammierung 9
J Simple HTTP Framework (basierend auf expressjs) Netzwerkprogrammierung 1
M HTTP Http requests aufzeichnen Netzwerkprogrammierung 2
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
M http request and response Netzwerkprogrammierung 0
M Verbindungszeit berechnen (TCP, HTTP/1.0, HTTP/1.1) Netzwerkprogrammierung 2
P HTTP Bild von einem Server per http kopieren Netzwerkprogrammierung 1
U HTTP XML vom Server abholen oder http Abfragen, Entscheidung treffen Netzwerkprogrammierung 0
P HTTP Server / Client Netzwerkprogrammierung 1
S HTTP-Requeste von Browser mit Java sniffen? Netzwerkprogrammierung 9
E HTTP java.lang.IllegalArgumentException: protocol = http host = null Netzwerkprogrammierung 1
M Server mit HTTP Netzwerkprogrammierung 9
H Sockets oder HTTP- Methoden? Netzwerkprogrammierung 3
B Socket HTTP-Request führt zu Endlosschleife Netzwerkprogrammierung 5
D HTTP nochne frage zu http requests Netzwerkprogrammierung 6
D HTTP Bräuchte hilfe mit Http Requests Netzwerkprogrammierung 6
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
F HTTP HTTP-Download: Dateien in einem Verzeichnis ermitteln Netzwerkprogrammierung 8
T HTTP Einen HTTP Server erstellen Netzwerkprogrammierung 20
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
Dit_ HTTP Einfache HTTP-Anfrage Netzwerkprogrammierung 6
nrg FileUpload HTTP POST Netzwerkprogrammierung 5
T Socket Java HTTP-Proxy Netzwerkprogrammierung 3
A HTTP Zugriff auf http-Server - Error 400 Netzwerkprogrammierung 11
B HTTP JSESSIONID in Http(s)URLConnection loswerden! Netzwerkprogrammierung 13
E Socket HTTP-Server Netzwerkprogrammierung 6
C HTTP POST Connect Netzwerkprogrammierung 9
D HTTP Java HTTP Kommunikation Netzwerkprogrammierung 9
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
O Http request Netzwerkprogrammierung 7
Tobse HTTP ServerSocket HTTP Netzwerkprogrammierung 4
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N Http Client Netzwerkprogrammierung 3
W Asynchroner HTTP Client / non-blocking I/O Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
L Body eines http Request auslesen Netzwerkprogrammierung 2
T HTTP Encoding von Http-Streams Netzwerkprogrammierung 2
D http request Netzwerkprogrammierung 11
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
J org.apache.http.auth.NTCredentials Netzwerkprogrammierung 2
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben