HttpURLConnection

Thaflasher

Mitglied
Hi Forum,

ich versuche eine HttpUrlConnection aufzubauen und möchte Strings verschicken. Leider ist irgendwas falsch und ich komm nicht drauf :noe:

Der "Sender":

Java:
URL url = new URL("http://localhost:8080/PercontatioServerModul/ControlPanel");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setDoOutput(true);
OutputStream os = urlc.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
			
for (int i = 0; i < fragen.size(); i++) {
	dos.writeUTF(fragen.get(i));
}
	dos.flush();
	dos.close();


und der Empfänger:

Java:
URL url = new URL("http://localhost:8080/PercontatioServerModul/ControlPanel");
			
			HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
			
			urlc.setDoInput(true);
			
			urlc.connect();
			
			DataInputStream dis = new DataInputStream(urlc.getInputStream());
			
			while (true){
				try{
				String blabla = dis.readUTF();
				testlist.add(blabla);
				}
				catch (EOFException e) {
					dis.close();
					urlc.disconnect();
					break;
				}
			}

Das eine Verbindung besteht erkenne ich daran, das keine ConnectException fliegt. Der response code ist 200 d.h. Http_ok .

Leider kommt beim InputStream nie was an. :(

Sieht jemand den Fehler?
 
Zuletzt bearbeitet von einem Moderator:
I

irgendjemand

Gast
ja ... völlig falscher ansatz ...

selbst wenn der dienst der auf TCP/8080 eine art relay ist ... so sind nach HTTP bereits alle daten übertragen wenn du schon das HTTP 200 response bekommst *da du leider nicht gesagt hast auf welcher seite wird es schwer hier zu raten*

alles in allem verstehe ich nicht ganz was du da vor hast ...

interprozess-kommunikation über einen relay-dienst ? das geht anderst ...
versuch mit einem servlet *oder ähnlich* daten auszutauschen ? geht auch anderst ... zu mal hier dann auch der code des servlets nötig ist ...

alles in allem wird weder klar was du vorhast , noch wo genau fehler auftreten ...

vielleicht fängst du damit an uns zu erklären was du damit eigentlich machen willst ... dann kann man sich gedanken über mögliche fehler machen und diese durchgehen ... aber "funktioniert nicht" ist keine fehlerbeschreibung
 
S

SlaterB

Gast
solche komplizierten Dinge versuchst du ohne je im Internet ähnliche Beispiele gesehen zu haben?
du reihst da ja kreativ Befehle zusammen, aber ohne Chance auf Funktionalität,

URLConnections können absolut nur auf Client-Seite verwendet werden, bilden KEINEN Server jeglicher Art

für den Server braucht es schon komplizierten Code, der als Thread dauerhaft läuft und auf Verbindungen wartet,
könnte man sicher auch in fertigen Klassen weitgehend verstecken, aber habe ich Java noch nicht wirklich gesehen,
bleiben Internet-Beispiele wie
Lightweight HTTP Server : HTTP ServerJDK 6Java
(oh, com.sun.net.httpserver.HttpServer scheint ja tatsächlich was in die Richtung zu sein, Java 1.6)

oder deutlich rudimentärer mit ServerSocket
Creating a simple java web server

Suchebegriffe: java http server
 

Thaflasher

Mitglied
Ich habe ein Servlet, das eine ArrayList mit Strings hält, und ich möchte diese Liste an alle übertragen die sich mit dem Servlet verbinden.

Für den Test habe ich den Empfänger (bei hm hab ich auch den responsecode erhalten) geschrieben, weil ich mir ansehen wollte wie das mit der URLConnection genau funktioniert.

Der Code meines Servlets ( nicht lachen, ich teste noch :) ):

Java:
/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		perform(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		perform(request, response);
	}
	
	protected void perform(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		URL url = new URL("http://localhost:8080/PercontatioServerModul/ControlPanel");
		
		PrintWriter out = response.getWriter();
		
		HttpSession session = request.getSession(false);
		if(session!=null){
			fragen= (ArrayList<String>) session.getAttribute("fragenliste");;
			bewertung = (ArrayList<String[]>) session.getAttribute("bewertungsliste");
			path=(String) session.getAttribute("path");
			servlet=(String) session.getAttribute("servlet");
			rootdir=(String) session.getAttribute("rootdir");
			session.invalidate();
		}
		
		String run1 = request.getParameter("run1");
		String run2 = request.getParameter("run2");
		String lq = request.getParameter("lq");
		String auswertung = request.getParameter("auswertung");

		if(run1!=null){
			
			HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
			urlc.setDoOutput(true);
			OutputStream os = urlc.getOutputStream();
			DataOutputStream dos = new DataOutputStream(os);
			
			for (int i = 0; i < fragen.size(); i++) {
				dos.writeUTF(fragen.get(i));
			}
			dos.flush();
			dos.close();
			
			currentrun="Lauf 1";
		}
		
		else if(run2!=null){
			currentrun="Lauf 2";
		}
		
		else if(lq!=null){
			currentrun="Frage wurde gestellt";
		}
		
		else if(auswertung!=null){
			//auswertung
		}
		
		out.println("<html>");
		out.println("<head>");
		out.println("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>");
		out.println("<title>GlassFish JSP Page</title>");
		out.println("</head>");
		out.println("<form method=post accept-charset=UTF-8 target=_self>");
		out.println("<p>"+ currentrun + ":</p>");
		
		out.println("<table border=0");
		out.println("<tr>");
		out.println("<td><input type=submit name=run1 value="+"'"+"Lauf 1"+"'"+"></td>");
		out.println("<td><input type=submit name=run2 value="+"'"+"Lauf 2"+"'"+"></td>");
		out.println("<td><input type=submit name=lq value="+"'"+"Live Frage"+"'"+"></td>");
		out.println("<td><input type=submit name=auswertung value=Auswertung ></td>");
		out.println("</tr>");
		out.println("</table>");
	}

Bis jetzt bin ich noch bei "run1" deswegen können die anderen buttons noch nicht wirklich was.

Zuerst muss ich aber die Strings aus dieser ArrayListe verschicken können. :(


Was ich nicht ganz verstehe:

Bei Sockets wird mit accept() "gewartet" bis jemand connect() aufruft und anschließend wird in den Outputstream geschrieben.

Bei diesen HttpUrlConnections scheint es zwar ein connect zu geben, aber kein accept. So dachte ich, das der Outputstream die Daten in das url object schreibt, welche man dann durch den inputstream wieder bekommt.

Jetzt hab ich schon mehrere Beispiele gesehen, aber ich sehe keinen großen Unterschied zu meinem code.


Edit:
Danke Slater, ich bin ehrlich, ich habs mir einfacher vorgestellt :) werde mich mal in die http server geschichte einlesen.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
besteht eine Frage oder erläuterst du nur nebenbei deine Gedanken?
Genauigkeit wäre schon ziemlich wichtig, wenn andere etwas davon verstehen sollen,


HttpURLConnection != Server, Ende der Geschichte, nichts mehr zu diskutieren oder welche konkrete Frage noch dazu?

in deinem neuen Code hast du ein J2EE-Servlet, wie ist das zu verstehen?
eine komplette J2EE-Anwendung ist natürlich für sich normalerweise ein Server, dann bräuchtest du weder (Server)Socket noch sonst irgendwas als Server,
es sei denn du planst irgendwas mehrstufiges..

was genau soll die perform()-Methode des Servlets machen?
normalerweise bearbeitet sie einen ankommenden Request eines Clients, setzt paar Daten und fertig,
eine URL hat dort (normalerweise zum dritten) nichts zu suchen
 
I

irgendjemand

Gast
das ganze sollte auch mit eine JSP-servlet auch sicher ohne polling gehen ... nur nicht so wie du dir das gedacht hast ...

wenn ich jetzt mal so kurz drüberfliege sind mir das nach grundsätzlicher server-client architektur aus ...

ich weis das es vielleicht nicht ganz das thema ist ... aber vielleicht arbeitest du dir das hier mal durch : Kaffee & Kuchen - Datenbank-Anbindung mit JDBC
bitte nicht vom link-namen irritieren lassen ... der webmaster hat beim TITLE dieser seite gepennt ... daher wird er von jf.o falsch geparsed ...
 

Thaflasher

Mitglied
Danke Slater denn ohne

normalerweise bearbeitet sie einen ankommenden Request eines Clients, setzt paar Daten und fertig,

wäre ich wohl nicht drauf gekommen. :)

Nun nehme ich den response OutputStream zum schreiben und siehe da, es geht.

Nochmals vielen Dank für deine Zeit
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
V Unterschied zwischen cURL und HttpURLConnection?? Netzwerkprogrammierung 2
E HTTP HttpURLConnection & Javascript Netzwerkprogrammierung 2
A HTTP HttpURLConnection wiederverwenden? Netzwerkprogrammierung 2
T Ladezeit einer Seite mit HttpURLConnection und Bildern Netzwerkprogrammierung 2
J HttpURLConnection ResponseCode 403 Netzwerkprogrammierung 2
R HTTP HttpURLConnection Large File Upload Netzwerkprogrammierung 1
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
M HttpURLConnection und Proxy Netzwerkprogrammierung 2
D Hilfe, meine HttpURLConnection hängt manchmal. Netzwerkprogrammierung 9
F HttpURLConnection überschreiben Netzwerkprogrammierung 2
W Problem mit HttpURLConnection Netzwerkprogrammierung 2
W HttpURLConnection-Wikipedia Netzwerkprogrammierung 15
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6
M HttpUrlConnection + Client/Server Problem Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
S Probleme mit HttpURLConnection Netzwerkprogrammierung 10
G Redirects einer HttpURLConnection ermitteln Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben