Connection Reset bei Webserver, Java WebStart als Client

Status
Nicht offen für weitere Antworten.

sparrow

Top Contributor
Hallo Forum,

ich möchte ein Programm mit einem kleinen Webserver ausstatten um es mit WebStart verteilen zu können.

Der Server lauscht also auf einen Port wie ein Webserver und übermittelt bei Anfrage nach der entsprechenden URL die .jnlp-Datei zum Client die dann dort von WebStart geöffnet wird.
Soweit kein Problem, wenn ich die entsprechenden Resourcen des Programms aus Firefox heraus aufrufe kann ich diese "downloaden", und die übertragenen Daten sind vollständig und korrekt. Der Webserver scheint also zu funktionieren.
Wenn nun aber WebStart die entsprechenden Anfragen stellt kommt es während der Übertragung zu einem Connection Reset. Der kann aber nicht vom Server ausgelöst werden, wie gesagt: mit Firefox funktioniert es problemlos und der Socket wird auch nicht versehentlich geschlossen.


Die Anfrage von Firefox für die Datei sieht wie folgt aus:
Code:
GET /client/lib/hibernate3.jar HTTP/1.1
Host: 127.0.0.1:14000
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080207 Ubuntu/7.10 (gutsy) Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Die Anfrage von WebStart:
Code:
GET /client/lib/hibernate3.jar HTTP/1.1
content-type: application/x-java-archive
accept-encoding: pack200-gzip,gzip
User-Agent: JNLP/6.0 javaws/1.6.0_03 (b05) Java/1.6.0_03
UA-Java-Version: 1.6.0_03
Host: 127.0.0.1:14000
Cache-Control: no-cache
Pragma: no-cache
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
If-Modified-Since: Wed, 31 Dec 1969 23:59:59 GMT

Das meiste davon ignoriere ich im Augenblick noch.
Auswerten tu ich die Get- und die Host-Zeile.
Darauf antworte ich wie folgt:
Code:
HTTP/1.0 200 OK
Server: TestServer
Content-type: application/x-java-archive

+daten


Mache ich hier einen Fehler im Protokoll?


Ich danke euch schonmal.


Gruß
Sparrow
 

sparrow

Top Contributor
Bisher schicke ich nur:
Code:
HTTP/1.0 200 OK
Server: TestServer
Content-type: application/x-java-archive

+daten
 

sparrow

Top Contributor
Ich sende nun:
Code:
HTTP/1.0 200 OK
server: TestServer
date: Sun, 2 Mar 2008 13:45:36 +0100
last-modified: Sun, 2 Mar 2008 13:45:36 +0100
cache-control: no-cache
pragma: no-cache
connection: close
content-type: application/x-java-archive
content-length: 2255753

Leider ändert das am Problem nichts.
Ich habe nun auch mal mitzählen lassen um vielleicht zu sehen ob er immer nach gleichvielen übertragenen Bytes aussteigt. Dem ist aber nicht so, der Ausstieg erfolgt immer an verschiedenen Stellen.
 

Murray

Top Contributor
Ich nehme an, Content-Length ist dann auch die Länge der Jar-Datei in Bytes.

Warum schreibst Du eigentlich HTTP/1.0? Hast Du es schon mit HTTP/1.1 versucht?
 

sparrow

Top Contributor
Eigentlich wollte ich ja gar keine HTTP 1.1 Funktionalitäten zur Verfügung stellen, deshalb beantworte ich den Request auch nur mit der Angabe von HTTP 1.0.
Aber auch das ändern nutzt leider nichts :(

Code:
HTTP/1.1 302 Found
server: TestServer
date: Sun, 2 Mar 2008 14:31:13 +0100
last-modified: Sun, 2 Mar 2008 14:31:13 +0100
cache-control: no-cache
pragma: no-cache
connection: close
content-type: application/x-java-archive
content-length: 2255753

Die Länge von content-length stimmt. Wenn ich mit Firefox auf die URL der Resource zugreife sendet der Server den Header und 2255753 Bytes bevor er den Socket schließt.

Das seltsame ist, und da komm ich jetzt erst drauf: WebStart selber gibt gar keinen Fehler aus. Das macht aber keinen Sinn, denn die Resourcen kommen nicht vollständig auf dem Client an.
 

sparrow

Top Contributor
Hmm.. mich wurmt es irgendwie, dass meine Lösung nicht funktioniert.

Hier mal der entsprechende Code meiner Methode auf dem Server

Code:
	private void sendClientData(OutputStream os,String requestedPage, String host) {
		String page = requestedPage.substring(8);
		int bytesSend = 0;
		try {
			// Looking for the requested name in the pluings
			Vector<String> pluginnames = Main.getClientPluginNames();
			boolean sidefound = false;
			for (int i = 0; i < pluginnames.size(); i++) {
				if (pluginnames.get(i).equals(page)) {
					Main.getLogger().info("Conhandler: " + handlerid + " SEND client resource: " + page);
					sidefound = true;
					File localfile = null;
					if (page.startsWith("lib/")) {
						localfile = new File("./lib/client/" + page.substring(4));
					} else {
						localfile = new File("./plugins/" + page);
					}
					InputStream is = localfile.toURI().toURL().openStream();
					// Setting optional Header-Information for http response
					ArrayList<String> optionalHeaderLines = new ArrayList<String>();
					optionalHeaderLines.add("Content-Length: " + localfile.length());
					sendHeader(os, localfile.toURI().toURL(), optionalHeaderLines);
					// Sending data to client
					int in;
					while ((in = is.read()) > -1) {
						os.write(in);
						bytesSend++;
					}
					Main.getLogger().debug("Conhandler: " + handlerid + ": " + bytesSend + " bytes send to client");
					break;
				}
			}
			if (!sidefound) {
				Main.getLogger().warn("Conhandler: " + handlerid + " WARN no such resource: " + page);
				writeStringToStream(httpError(404, "Page not found"), os);
			}
		} catch (IOException e) {
			Main.getLogger().error("Conhandler: " + handlerid + " ERROR while SENDING RESOURCE to the client: " + page + " : "+ e.getMessage());
			Main.getLogger().debug("Conhandler: " + handlerid + ": " + bytesSend + " bytes send to client");
			e.printStackTrace();
		}
}
 

sparrow

Top Contributor
Ich habe den Tipp bekommen nicht direkt an den Client zu senden sondern ein Byte-Array zu füllen welches dann übertragen wird. Leider ändert das nichts am Problem.
Inzwischen habe ich die Vermutung, dass es irgend etwas mit dem Cache von JavaWS zu tun hat. Der Client also meint, dass das Archiv nicht erneuert werden muss und deshalb die Übertragung abbricht.
Nach vielen Versuchen meine ich nun zu wissen, dass der Client die Übertragung im Laufe der Ausführung noch einmal aufnimmt wenn das Archiv fehlerhaft ist. Sicher bin ich mir da allerdings nicht.

Code:
	private void sendClientData(OutputStream os,String requestedPage, String host) {
		String page = requestedPage.substring(8);
		int bytesSend = 0;
		try {
			// Looking for the requested name in the pluings
			Vector<String> pluginnames = Main.getClientPluginNames();
			boolean sidefound = false;
			for (int i = 0; i < pluginnames.size(); i++) {
				if (pluginnames.get(i).equals(page)) {
					Main.getLogger().info("Conhandler: " + handlerid + " SEND client resource: " + page);
					sidefound = true;
					File localfile = null;
					if (page.startsWith("lib/")) {
						localfile = new File("./lib/client/" + page.substring(4));
					} else {
						localfile = new File("./plugins/" + page);
					}
					InputStream is = localfile.toURI().toURL().openStream();
					// Setting optional Header-Information for http response
					ArrayList<String> optionalHeaderLines = new ArrayList<String>();
					optionalHeaderLines.add("Content-Length: " + localfile.length());
					this.sendHeader(os, localfile.toURI().toURL(), optionalHeaderLines);
					// sendint the data to the client
					int in = 0;
					int bufferCounter = 0;
					byte[] sendBuffer = new byte[SEND_BUFFER_SIZE];
					while ((in = is.read()) > -1) {
						sendBuffer[bufferCounter] = (byte) in;
						bufferCounter++;
						if (bufferCounter >= sendBuffer.length) {
							os.write(sendBuffer);
							os.flush();
							sendBuffer = new byte[SEND_BUFFER_SIZE];
							bufferCounter = 0;
						}
						bytesSend++;
					}
					os.write(sendBuffer);
					os.flush();
					os.close();
					Marmota.getLogger().debug("Conhandler: " + handlerid + ": " + bytesSend + " bytes send to client");
					break;
				}
			}
			if (!sidefound) {
				Main.getLogger().warn("Conhandler: " + handlerid + " WARN no such resource: " + page);
				writeStringToStream(httpError(404, "Page not found"), os);
			}
		} catch (IOException e) {
			Main.getLogger().error("Conhandler: " + handlerid + " ERROR while SENDING RESOURCE to the client: " + page + " : "+ e.getMessage());
			Main.getLogger().debug("Conhandler: " + handlerid + ": " + bytesSend + " bytes send to client");
			e.printStackTrace();
		}
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
D Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft Netzwerkprogrammierung 4
K Socket Exception Connection reset Netzwerkprogrammierung 9
VfL_Freak Socket SocketException: Connection reset Netzwerkprogrammierung 11
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
T Wie connection Reset abfragen/abfangen? Netzwerkprogrammierung 10
IT-MaD Connection reset by peer: socket write error Netzwerkprogrammierung 2
B Multithreaded Server: Connection reset Netzwerkprogrammierung 4
T JDBC Verbindungsabbruch (Connection reset) Netzwerkprogrammierung 2
M SocketException: Connection reset Netzwerkprogrammierung 10
M seltsam: java.net.SocketException: Connection reset Netzwerkprogrammierung 1
Thalion TCP Connection zu langsam Netzwerkprogrammierung 2
S Client Server Connection Netzwerkprogrammierung 4
C Handle Connection Problem Netzwerkprogrammierung 3
L ssh connection; Zugriff auf 'screen' Prozess Netzwerkprogrammierung 5
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
M Connection refused? Netzwerkprogrammierung 2
D Connection refused Netzwerkprogrammierung 3
B Client/Server Connection Problem Netzwerkprogrammierung 2
C Socket Connection refused bei Internetverbindung - Welcher Port? Netzwerkprogrammierung 5
C Socket Socket: Connection timed out Netzwerkprogrammierung 3
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
H java.net.ConnectException: Connection refused Netzwerkprogrammierung 3
RELAXccc HTTP Connection timed out: connect ?an was kann es liegen? Netzwerkprogrammierung 4
N Socket verliert die Connection. Netzwerkprogrammierung 4
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
M RMI - Connection Problem Netzwerkprogrammierung 7
trash HTTP Internet Connection bei Proxy ?! Netzwerkprogrammierung 3
H RMI Connection refused bei RMI-Registry Netzwerkprogrammierung 10
S SSH-Connection - Auto-Vervollständigung mittels TAB Netzwerkprogrammierung 4
A Chatprogramm: Connection refused Netzwerkprogrammierung 4
T RMI RMI und VPN - callbackObject Connection refused Netzwerkprogrammierung 13
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
0din Connection refused bei localhost?! Netzwerkprogrammierung 7
M FTP-Connection über FTP-Proxy Netzwerkprogrammierung 20
A RMI java.rmi.ConnectException: Connection refused to host: 1 Netzwerkprogrammierung 4
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
G InputStreamReader lässt TCP-Connection offen Netzwerkprogrammierung 9
X URL connection Problem Netzwerkprogrammierung 3
R ConnectException: Connection refused to host: 192.168.1.4 ? Netzwerkprogrammierung 8
tfa RMI-Problem: Connection refused to host: 127.0.0.2 Netzwerkprogrammierung 4
G Connection zu MySQL ohne ODBC Netzwerkprogrammierung 8
B RMI & Connection refused to host Netzwerkprogrammierung 12
G httpUnit: Connection timed out Netzwerkprogrammierung 3
lhein java.io.IOException: Unable to establish loopback connection Netzwerkprogrammierung 4
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
G MAC / IP Connection Netzwerkprogrammierung 10
M Problem: connection abbrechen und login erkennen Netzwerkprogrammierung 2
M Umlaute gehen bei URL Connection verloren Netzwerkprogrammierung 6
B RMI Connection Problem Netzwerkprogrammierung 13
T Dateien wia P2P Connection versenden Netzwerkprogrammierung 2
D Socketverbindung schlägt fehl - Connection refused: connect Netzwerkprogrammierung 4
H java.net.SocketException: Software caused connection abort Netzwerkprogrammierung 4
R FTP Connection zu Server Netzwerkprogrammierung 4
M Ausgangsport für FTp-Connection festlegen??? Netzwerkprogrammierung 3
M ObjectOutputStream reset gibt IOException Netzwerkprogrammierung 4
J Webserver mit Java schreiben? Netzwerkprogrammierung 4
S Socket Webserver mit SSLSocket geht nicht Netzwerkprogrammierung 1
B HTML mit Webserver und Datenbank verbinden Netzwerkprogrammierung 2
Z Debug-Info einer JavaSE Applikation auf Webserver Netzwerkprogrammierung 0
K Webserver mit Ethernet-Device verbinden Netzwerkprogrammierung 0
S Webserver für Jar File Netzwerkprogrammierung 4
F Java App mit Webserver Netzwerkprogrammierung 4
L Webserver pingen Netzwerkprogrammierung 5
Semox HTTP Webserver: Externe Dateien werden nicht verwendet. Netzwerkprogrammierung 10
TiME-SPLiNTER HTTP User Authentication: Java Client -> Webserver Netzwerkprogrammierung 7
Semox Socket Selbstgeschriebenen Webserver im lokalen Netzwerk publizieren? Netzwerkprogrammierung 4
I HTTP Grundlagen um einen Webserver zu erstellen Netzwerkprogrammierung 17
L Javaprogramm auf Webserver Netzwerkprogrammierung 5
M Java-Programm als Webserver erzeugt HTML Netzwerkprogrammierung 8
S Verständnisproblem concurrent - iterativer Webserver Netzwerkprogrammierung 2
D "FileChooser" auf einem Webserver Netzwerkprogrammierung 5
F Empfehlung für embedded Webserver Netzwerkprogrammierung 10
F Webserver Zugriff per Java Netzwerkprogrammierung 3
H Webserver mit PHP als Java-Programm, gibt es schon so etwas? Netzwerkprogrammierung 12
C Socketkommunikation mit Webserver Netzwerkprogrammierung 5
J Webserver auf einem Pocket PC Netzwerkprogrammierung 2
M sessionhandling beim webserver Netzwerkprogrammierung 5
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
A Webserver - Bild senden Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben