hallo,
hab eine kleine java application geschrieben die mich mit meinem apache server auf dem http:// port 80 verbindet
wenn ich den befehl z.b "GET /index.html" funktioniert alles und die html seite wird (natürlich in textform) angezeigt
will ich den forum ohne reconnection wiederholen geht dies allerdings nicht wieder WARUM??
Canceled der apache webserver die connection nach dem request??
aber da müsste ich doch eine exception bekommen !!
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Hi draso!
Ob Apache die Verbindung trennt kommt u.a. auf Deinen Request an und auch wie der jeweilige Apache Server konfiguriert ist.
Falls bei Apache "Connection:Close" eingestellt ist (in "httpd.conf"), dann kannst Du nix machen. Du kannst dies jedoch (in "httpd.conf") auf "Connection:keep-alive" ändern. Dies ist nebenbei auch die Standardeinstellung und falls Du nach der Installation nix verändert hast sollte es auch so sein.
Dein Request sollte korrekt wie folgt aussehen:
----
GET /index.html HTTP/1.1
Host:localhost
Connection:keep-alive
-----
Ich nehme mal an, dass Du per java.net.Socket eine Verbindung zu Port 80 herstellst. Eine Exception bei einer getrennten Verbindung solltest Du hier nicht bekommen. Schau Dir mal die API-Doku für Sockets an um die Exceptions zu identifizieren:
http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html
Sicher benutzt Du auch den Syntax: "Socket.getInputStream()" um Dir 'nen Inputstream zum übermitteln des Requests an den Server zu verschaffen. Vergesse hier nicht, dass Du nach der letzten Zeile des Requests eine Leerzeile einfügen musst. Das ist GANZ GANZ wichtig!!!!
Hoffe Dir hilft das ein bisserl weiter!
danke,
werds gleich ausprobieren
noch eine Frage:
ist es irgendwie möglich ,dass man in eine bestehende verbindung die allerdings nicht in der java application aufgebaut wurde, eingreift und das port auf dem lokalen pc sozusagen abhört?
ich glaub ich weiß nun wie es geht
mit nem datagramsocket
aber muss erst nochmal schaun
hab nun nochmal probiert!!
wenn ich den request schreibe mit HTTP/1.1
z.b. out.println("GET /hw02b/hw02b1.html HTTP/1.1\nHost:localhost\nConnection:keep-alive ");
funktioniert zwar die anfrage aber ich bekomm keine antwort mehr
wenn ich hingegen ohne HTTP/1.1
bekomm ich eine Antwort
nun denkst du wahrscheinlich dass dies sein könnte, wegen eines
client sent HTTP/1.1 request without hostname
aber wenn ich ja den Host:localhost hinschreib funktionierts ja mit der anfrage und in der error.log wird auch nichts eingetragen.
woran könnt das nun liegen ??
danke für deine HILFE
Du musst eine LEERZEILE an die letzte Zeile des Requests anhängen (siehe meinen letzten Post) :-)
Versuch mal folgendes:
System.out.println("GET /hw02b/hw02b1.html HTTP/1.1");
System.out.println("Host:localhost");
System.out.println("Connection:keep-alive");
System.out.println("");
Indem Du out.println() anstatt out.print() verwendest, hängst Du automatisch an jede Zeile einen Newline-Character (\n) an.
Ausprobieren.... :-)
jawoll
super
VIELEN DANK
liegt das an der letzten Zeile ??
Du nach der letzten Zeile des Requests eine Leerzeile einfügen musst
Hast du eh schon geschrieben
NUR hab ich mich zuerst verlesen und LEERZEICHEN gelesen ;-)
Danke nochmal
noch eine kleine Frage:
gibt es irgendeine Seite wo ich genügend information über die verfassung der requests nachlesen kann?
wie z.b. bei der POST anweisung
Wiegesagt es funktioniert aber etwas was mir noch nicht aufgefallen ist ist, dass wenn ich den html code ausgebe mit z.b.
while(in.read()!=-1){
System.out.print((char)in.read());
}
System.out.println("fertig gelesen");
nach dem letzten tag des
Hallo!
ich kann mir eigentlich nicht erklären woran das liegt - hmm :-)
Versuch aber mal folgendes. Da Du ja ohnehin nur Strings liest bzw. schreibst, kannst Du den InputStream von der Socket in einen BufferedReader einschliessen (wrapping):
===================================
BufferedReader read;
string loop;
read = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (loop==read.readLine()) {
System.out.println(loop);
}
System.out.println("fertig gelesen");
==============================
Das sollte eigentlich Abhilfe schaffen. Merke: dieser Konstrukt funktioniert nicht zum lesen von Binärdaten!
Nochmal Hallo!
Freut mich, dass es jetzt funktioniert :-)
Ein bisschen mehr über das HTTP Protokoll (also auch die Requests) kannst Du sicherlich über google herausfinden. Gib einfach mal exklusiv "HTTP Protokoll" ein.
Die "Hochheit" über alle diese Infos ist jedoch das World-Wide-Web Consortium:
http://www.w3c.org
oder spezifischer:
http://www.w3c.org/Protocols
Da sind alle Spezifikationen vom HTTP Protokoll zu finden. Die Seite ist in Englisch und für Anfänger vielleicht etwas unübersichtlich.
HTTP Post ist eigentlich genau das gleiche wie HTTP Get. Der Unterschied ist lediglich, dass Du statt GET, POST schreibst und nach der finalen Leerzeile (mit der Du Probleme hattest :-)) eine Zeile mit den Post-Variablen kommt.
Falls Du noch Fragen hast, einfach posten... :-)