Server sagt nix / EOFException

Status
Nicht offen für weitere Antworten.
M

Mindphuk

Gast
Hi

Wie in dem anderen Posting schon geschrieben, versuche ich mich gerade an einem Proxy-Server, um mehr über Serverprogrammierung in Java und über HTTP im Allgemeinen zu lernen.
Mein Plan für die Vorgehensweise war Folgender:

  • * ServerSocket auf localhost:8080 für den Proxy.
    * Browser sendet die Anfrage an mich, ich speichere sie in einem Array/ArrayList.
    * Ich extrahiere aus der Anfrage, wo der Browser hin wollte (Host: www.example.com, 2. Zeile in der Anfrage. Da ich diese Zeile brauche, um die externe Verbindung auf zu bauen, speichere ich die Anfrage vom Browser zwischen).
    * Dort hin mache ich eine Socket-Verbindung und schicke über diese das Array, was ich vom Browser bekommen habe.
    * Der angefragte Webserver antwortet mit der Seite, was ich "on the fly" direkt an den Browser ausgebe.
Wie gesagt, ich bin neu in der Serverprogrammierung mit Java und daher weiss ich nicht, ob meine Vorgehensweise überhaupt praktikabel in Java ist. Wenn man das grundsätzlich anders/besser macht, bitte korrigieren. In Perl habe ich vor Jahren mal was ähnliches gemacht, aber da war es relativ einfach, weil alles nur simple Strings waren.

Anyhow, alles was ich erreiche ist eine EOFException während ich versuche vom Server zu lesen. Dabei wartet das Programm immer eine Weile, um dann aus dem Try-Block mit der Exception zu fliegen. Der Browser kriegt dann nur eine leere Antwort und kommt mit einem Downloadfenster für eine Datei vom Typ application/octet-stream (klar, er bekommt was undefiniertes und kann damit natürlich nichts anfangen).

Ich weiss generell nicht, wie ich mit den Streams am besten umgehe. Ist sowas am besten über einen Data oder ObjectInput/OutputStream zu lösen, oder ist ein BufferedReader hier die Option der Wahl?
Wie schreibe ich am besten auf den Client (Browser) Sockel, ObjectOutputStream oder BufferedWriter?
Muss ich mit den vom Browser empfangenen Strings noch was tun (\r\n oder sowas, vielleicht Trimmen?) oder kommen die bei mir schon korrekt an?

Hier mal meine Server-Methode, die das ganze jetzt Testweise mal abwickeln soll:

Code:
public void runServer(int localport){
        try{
            localServer = new ServerSocket(localport);
        } catch(IOException e) {
            System.err.println("Server failed: " + e);
        }
        System.out.println("Proxy listening at "+localport+". Waiting for connections...");

        while(true){
            try{
                theirClient = localServer.accept();

                //connection okay

                BufferedReader fromClient = new BufferedReader(
                        new InputStreamReader(theirClient.getInputStream()));
                ObjectOutputStream toClient =
                        new ObjectOutputStream(theirClient.getOutputStream());

                //read requests
                ArrayList request = new ArrayList();
                String requestLine = null;
                while(!(requestLine = fromClient.readLine()).isEmpty()){
                    //System.out.println("request: " + requestLine);
                    request.add(requestLine);
                }

                handleClientInput(request); //sets host and port

                System.out.println("Connecting to "+host+":"+remoteport);

                //connect to remote server
                try{
                    remoteServer = new Socket(host, remoteport);
                } catch (IOException e) {
                    System.err.println(e);
                }

                try{
                    streamToServer =
                            new BufferedWriter(
                                new OutputStreamWriter(remoteServer.getOutputStream()));
                    streamFromServer =
                            new DataInputStream(remoteServer.getInputStream());
                    for(int i = 0; i < request.size()-1; i++){
                        System.out.println("requestline "+i+" of "+request.size()+" to server: " + request.get(i).toString());
                        streamToServer.write(request.get(i).toString());
                        streamToServer.newLine();
                        streamToServer.flush();
                    }
                    //System.out.println("requestline "+0+" of "+request.size()+" to server: " + request.get(0).toString());
                    //streamToServer.write(request.get(0).toString()+"\r\n");
                    //streamToServer.newLine();
                    //streamToServer.flush();
                } catch (EOFException e) {
                    e.printStackTrace();
                }

                ArrayList response = new ArrayList();
                int responseByte;
                try{
                    while((responseByte = streamFromServer.read()) != -1){ //Breakpoint, an welchem die Exception passiert
                        System.out.println("From server:" + responseByte);
                        response.add(requestLine);
                    }
                    for(int i = 0; i < response.size()-1; i++){
                        System.out.println("response "+i+" of "+response.size()+" from server: " + response.get(i));
                        toClient.writeBytes((String) response.get(i));
                        toClient.flush();
                    }
                } catch (EOFException e) {
                    e.printStackTrace();
                    toClient.writeBytes((String) "400 Bad Request\r\n Content-Type: text/html\r\n" + e);
                    toClient.flush();
                }
                
                toClient.close();
                fromClient.close();
                theirClient.close();
                remoteServer.close();
            } catch(IOException e){
                System.err.println(e);
            }
        }
    }

Für alle möglichen Arten von Tipps bin ich dankbar.

Gruss
mph
 
G

Gast

Gast
Ich glaub, ich hab das falsche Edit vom Code gepostet.
Die while-schleife muss so aussehen:
Code:
while((responseByte = streamFromServer.read()) != -1){
                        System.out.println("From server:" + responseByte);
                        response.add(responseByte);
                    }

Ich bastle am Code natürlich dauernt herum, daher passiert sowas :D Das von mir beschriebene Prinzip ist aber dennoch was ich verfolge...
 
M

Mindphuk

Gast
Noch'n PS: Ich würde das ganze natürlich gerne mit Sun's Standard Klassen lösen, also nicht auf org.apache.* o.ä. zurückgreifen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F FTP Client mit Sockets - wann sagt der Server nichts mehr? Netzwerkprogrammierung 7
hieuhp132 Server wird nicht auf zweiten Anfrage von Client geupdated Netzwerkprogrammierung 3
I RMI ConnectionRefused schon bei Server-binding Netzwerkprogrammierung 11
R Websockets oder server sent events? Netzwerkprogrammierung 2
W Windows 2019-Server Dienste starten unter Nutzer Netzwerkprogrammierung 1
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
E Server mit GUI Netzwerkprogrammierung 4
E FTP FTPS Server gibt Fehlernachricht "522 SSL/TLS required on the data channel" zurück Netzwerkprogrammierung 1
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
Eigenen Rechner als Server? Netzwerkprogrammierung 16
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
J Datei Download vom Server Netzwerkprogrammierung 8
izoards Mehrere TCP Verbindungen auf einen Server [alles Local] Netzwerkprogrammierung 2
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
K Threads/Server/telnet Fehler Netzwerkprogrammierung 2
J Multithreaded-Server Netzwerkprogrammierung 21
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
L30nS RMI RMI-Server kann Dialog nicht volkommen anzeigen Netzwerkprogrammierung 2
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
F NodeJs-Server auf Firebase hosten ? Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
H HTTP Glassfish (v5) Application Server - Bibliothek zur Verfügung stellen Netzwerkprogrammierung 4
B HttpClient - Server (Jetty) - getInputStream - EOF Netzwerkprogrammierung 3
P TCP-Server Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
F Server für Java Applikationen Netzwerkprogrammierung 16
H Einfacher Server funktioniert nicht Netzwerkprogrammierung 1
G Server-Client IO Problem Netzwerkprogrammierung 6
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
T HTTPS-Requests an Server: POST-Parameter kommen nicht an Netzwerkprogrammierung 5
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
T Jetty Server LOGGING Netzwerkprogrammierung 1
L Strings an Server senden und in MYSQL speichern? Netzwerkprogrammierung 3
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
T server empfängt nur 1 Buchstaben vom String Netzwerkprogrammierung 1
S Spiel mit Server programmieren Netzwerkprogrammierung 2
N Post u Head Request an Server Netzwerkprogrammierung 4
J Socket Ein Chat Server Tutorial Netzwerkprogrammierung 8
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
J Socket Tutorial zu Multiplayer Server schreiben? Netzwerkprogrammierung 5
S Java Chat Server Netzwerkprogrammierung 8
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
D Socket Message an einen Server senden? Netzwerkprogrammierung 8
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
KaffeeFan Programmierung mit Cloud-Server Netzwerkprogrammierung 0
L Socket Problem mit Server Netzwerkprogrammierung 1
cezary Socket Paralleler Server ? Netzwerkprogrammierung 1
I Socket Leicht zu DDosender Server Netzwerkprogrammierung 4
agent47 HTTPs Server Netzwerkprogrammierung 5
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
J Prüfen, ob remote UDT Server erreichbar ist Netzwerkprogrammierung 0
P Server als Client nutzen Netzwerkprogrammierung 8
S Server Kommunikation Netzwerkprogrammierung 1
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
S Webservice - Server Netzwerkprogrammierung 0
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
M Socket Java Server: NullPointerException Netzwerkprogrammierung 4
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
J Java Server empfängt php inhalt nicht Netzwerkprogrammierung 1
K C# Server - Android Client Netzwerkprogrammierung 0
J Framework mehrere Clients/ Server-Broadcast/oracle XE/ XML Netzwerkprogrammierung 1
D Mit Server Daten austauschen Netzwerkprogrammierung 4
V Server / mehrere Clients / MySQL / Konzept Netzwerkprogrammierung 2
P HTTP Bild von einem Server per http kopieren Netzwerkprogrammierung 1
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben