Server Client Verbindung - Unexpected End of File - Invalid HTTP Response

Dearbone

Neues Mitglied
ich weiß nicht ob ich im richtigen Bereich dieses Forums bin, wenn nicht, würde ich mich freuen wenn die Admins meinen Beitrag gegebenenfalls verschieben =)

Hallo Leute, würde mich erstmal kurz vorstellen.
Bin 22 Jahre alt und studiere im moment Informatik im vierten Semester.
Bis jetzt keine Erfahrungen mit Netwerkgeschichten oder Java, dennoch gibt es nun eine kleine Praktikumsaufgabe die wir erledigen müssen, einen "Webservice" zu entwickeln der es ermöglicht, virtuelle Warenkörbe zu verwalten.

Auf Client Seite dürfen wir die Klasse HTTPUrlConnection verwenden, auf Server Seite nicht.
Soweit so gut.

Nach einigen ( ne menge ) Tagen programmieren, testen, und :bahnhof:
wollte ich mal hier nachfragen wo der Fehler liegt.

Der Client schickt 12 Anfragen zum Server, und dieser soll dementsprechend Antworten.
Ich habe auf Server Seite die erste Anfrage "bearbeitet" und die if Bedingung dafür programmiert, was er bei dieser tun soll.
Mein erstes Erfolgserlebnis hier, Es funktionierte :toll:

Daraufhin natürlich gleich an die nächsten Bedingungen gesetzt, damit alle Anfragen beantwortet werden können.
Alles ausprogrammiert, getestet und hier kommt das Problem:noe::

Keine der Anfragen wird richtig beantwortet, weder die restlichen 11, noch die erste, die vorher richtig beantwortet wurde. Es kommt entweder der Fehler : Invalid HTTPResponse oder Unexpected end of File.

Bin gerade am Verzweifeln und würde mich freuen, falls einer von euch mir helfen könnte :oops:

Hier mein Quellcode:
Server
Code:
import java.net.*;

public class Server 
{
	public static void main(String[] args) 
	{	
	
		Threads T;
		ServerSocket serverSocket = null;
		Socket socket;
		Warenkorb test = new Warenkorb();
		try
		{
			serverSocket = new ServerSocket(8088);
		}
		catch (Exception e)
		{
			System.out.println("Fehler 1");
		}
		while (true)
		{
			try
			{
				socket = serverSocket.accept();
				T = new Threads(socket, test);
				T.Verbindung();
			}
			catch (Exception e)
			{
				System.out.println("Fehler 2");
			}
		}
	}
}

Threads:
Code:
import java.net.*;
import java.util.ArrayList;
import java.io.*;

public class Threads extends Thread 
{
	Socket socket;
	Warenkorb test = new Warenkorb();
	ArrayList<Warenkorb> Warenkörbe = new ArrayList<Warenkorb>();
	
	public Threads(Socket s, Warenkorb t)
	{
		socket = s;
		test = t;
	}
	public void Verbindung()
	{
		OutputStream out;
		InputStream in;
		String Rückgabe = "";
		StringBuilder build = new StringBuilder();
		
		try
		{
			System.out.println("Verbunden ");
			out = socket.getOutputStream();
			in = socket.getInputStream();
			
			do
			{
				build.append((char) in.read());
			}
			while (in.available() !=0);
			
			String StringInput = build.toString();
			String [] abschnitt = (StringInput.split("\\s+")[1]).split("/");
			
			if(StringInput.contains("GET /"))
			{	
				if(abschnitt[1].equals("Beschreibung"))
				{
					int abschnitt2= Integer.parseInt(abschnitt[2]);
					Rückgabe = test.Artikelbeschreibung(abschnitt2);
				}
				if(abschnitt[1].equals("Warenkorb"))
				{
					if(abschnitt[2].equals("Zeigen"))
					{
						for (int i = 0; i < Warenkörbe.size(); i++)
						{
							int abschnitt3= Integer.parseInt(abschnitt[3]);
							if(Warenkörbe.get(i).WKid() == abschnitt3 )
							{
								Warenkörbe.get(i).Ausgabe(i);
							}
						}
					}	
				}		
			}
			else if (StringInput.contains("PUT /"))
			{
				if (abschnitt[2].equals("Neu"))
				{
					Warenkörbe.add(new Warenkorb());
					Rückgabe = "Neuer Warenkorb wurde angelegt";
				}
				if(abschnitt[2].equals("Legen"))
				{
					for (int i = 0; i < Warenkörbe.size(); i++)
					{
						int abschnitt3= Integer.parseInt(abschnitt[3]);
						int abschnitt4= Integer.parseInt(abschnitt[4]);
						if(Warenkörbe.get(i).WKid() == abschnitt3);
						{
							Warenkörbe.get(i).Legen(abschnitt4, abschnitt3);
						}
					}
				}
				
			}
			else if(StringInput.contains("DELETE /"))
			{
				if(abschnitt[1].equals("Warenkorb"))
				{
					if(abschnitt[2].equals("Löschen"))
					{
						for (int i = 0; i < Warenkörbe.size(); i++)
						{
							int abschnitt3= Integer.parseInt(abschnitt[3]);
							if(Warenkörbe.get(i).WKid()== abschnitt3)
							{
								Warenkörbe.remove(i);
							}
						}
					}
				}
			}
			else 
			{
				Rückgabe = ("Falsches Kommando");
			}
			
			for (int i = 0; i < Rückgabe.length(); i++) 
			{
				out.write(Rückgabe.charAt(i));
			}	
			out.flush();
			System.out.println(("Empfangen:  ") + build);
			System.out.println(("Gesendet:	 ") + Rückgabe);
			socket.close();
		}
		catch (Exception e) 
		{
		System.out.println("Fehler 3");
		}
	}
}

Client:
Code:
import java.io.*;
import java.net.*;

public class Client 
{

	public static void main(String[] args) 
	{
		String host = "http://localhost:8088";
		
		
		getservice("GET", host, "/Beschreibung/22545497/");
		getservice("GET", host, "/Beschreibung/12548947/");
		getservice("PUT", host, "/Warenkorb/Neu/");
		getservice("PUT", host, "/Warenkorb/Neu/");
		getservice("PUT", host, "/Warenkorb/Legen/1/22545497/");
		getservice("PUT", host, "/Warenkorb/Legen/1/12545497/");
		getservice("PUT", host, "/Warenkorb/Legen/1/12548947/");
		getservice("GET", host, "/Warenkorb/Zeigen/1/");
		getservice("DELETE", host, "/Warenkorb/Löschen/1/");
		getservice("PUT", host, "/Warenkorb/Legen/2/22545497/");
		getservice("GET", host, "/Warenkorb/Zeigen/1/");
		getservice("GET", host, "/Warenkorb/Zeigen/2/");
	}
	
	private static void getservice(String method, String host, String arg) {
		HttpURLConnection connection = null;
		OutputStreamWriter wr = null;
		BufferedReader rd = null;
		StringBuilder sb = null;
		String line = null;

		URL serverAddress = null;
		System.out.println("Anfrage: "+"\""+ method + " "+ arg +"\""+ "  an: " + host);
		try {
			serverAddress = new URL(host + arg);
			// set up out communications stuff
			connection = null;

			// Set up the initial connection
			connection = (HttpURLConnection) serverAddress.openConnection();
			connection.setRequestMethod(method);
			connection.setDoOutput(true);
			connection.setReadTimeout(5000);
			connection.setUseCaches(false);

			connection.connect();
			// get the output stream writer and write the output to the server
			// not needed in this example
			// wr = new OutputStreamWriter(connection.getOutputStream());
			// wr.write("");
			// wr.flush();

			// read the result from the server
			rd = new BufferedReader(new InputStreamReader(connection
					.getInputStream()));
			sb = new StringBuilder();

			while ((line = rd.readLine()) != null) {
				sb.append(line + '\n');
			}

			System.out.println("Antwort: " + '\n' + sb.toString());

		} catch (MalformedURLException e) {
			System.out.println(e.getMessage());
		} catch (ProtocolException e) {
			System.out.println(e.getMessage());
		} catch (IOException e) {
			System.out.println(e.getMessage());
		} finally {
			// close the connection, set all objects to null
			connection.disconnect();
			rd = null;
			sb = null;
			wr = null;
			connection = null;	
		}

	}
}
 

Runtime

Top Contributor
[Ich hab den Quelltext nicht gelesen]
1. Setze den Code in Java-Tags (ganz gross und rot über dem Editor), damit man auch die Zeile ablesen kann, in dem der Fehler geworfen wird.
2. Gib bitte den ganzen Fehler an, der ausgegeben wird, damit man die Zeilennummer, in der der Fehler geworfen wird, kennt.
 

Dearbone

Neues Mitglied
Der Fehler der auf Client Seite ausgegeben wird, ist : "Invalid HTTP Response"
auf Server Seite ist es: "Software caused connection abort: socket write error"


Server:

Java:
import java.net.*;

public class Server 
{
	public static void main(String[] args) 
	{	
	
		Threads T;
		ServerSocket serverSocket = null;
		Socket socket;
		Warenkorb test = new Warenkorb();
		try
		{
			serverSocket = new ServerSocket(8088);
		}
		catch (Exception e)
		{
			System.out.println("Fehler 1");
		}
		while (true)
		{
			try
			{
				socket = serverSocket.accept();
				T = new Threads(socket, test);
				T.Verbindung();
			}
			catch (Exception e)
			{
				System.out.println("Fehler 2");
			}
		}
	}
}

Threads:

Java:
import java.net.*;
import java.util.ArrayList;
import java.io.*;

public class Threads extends Thread 
{
	Socket socket;
	Warenkorb test = new Warenkorb();
	ArrayList<Warenkorb> Warenkörbe = new ArrayList<Warenkorb>();
	
	public Threads(Socket s, Warenkorb t)
	{
		socket = s;
		test = t;
	}
	public void Verbindung()
	{
		OutputStream out;
		InputStream in;
		String Rückgabe = "";
		StringBuilder build = new StringBuilder();
		
		try
		{
			System.out.println("Verbunden ");
			out = socket.getOutputStream();
			in = socket.getInputStream();
			
			do
			{
				build.append((char) in.read());
			}
			while (in.available() !=0);
			
			String StringInput = build.toString();
			String [] abschnitt = (StringInput.split("\\s+")[1]).split("/");
			
			if(StringInput.contains("GET /"))
			{	
				if(abschnitt[1].equals("Beschreibung"))
				{
					int abschnitt2= Integer.parseInt(abschnitt[2]);
					Rückgabe = test.Artikelbeschreibung(abschnitt2);
				}
				if(abschnitt[1].equals("Warenkorb"))
				{
					if(abschnitt[2].equals("Zeigen"))
					{
						for (int i = 0; i < Warenkörbe.size(); i++)
						{
							int abschnitt3= Integer.parseInt(abschnitt[3]);
							if(Warenkörbe.get(i).WKid() == abschnitt3 )
							{
								Warenkörbe.get(i).Ausgabe(i);
							}
						}
					}	
				}		
			}
			else if (StringInput.contains("PUT /"))
			{
				if (abschnitt[2].equals("Neu"))
				{
					Warenkörbe.add(new Warenkorb());
					Rückgabe = "Neuer Warenkorb wurde angelegt";
				}
				if(abschnitt[2].equals("Legen"))
				{
					for (int i = 0; i < Warenkörbe.size(); i++)
					{
						int abschnitt3= Integer.parseInt(abschnitt[3]);
						int abschnitt4= Integer.parseInt(abschnitt[4]);
						if(Warenkörbe.get(i).WKid() == abschnitt3);
						{
							Warenkörbe.get(i).Legen(abschnitt4, abschnitt3);
						}
					}
				}
				
			}
			else if(StringInput.contains("DELETE /"))
			{
				if(abschnitt[1].equals("Warenkorb"))
				{
					if(abschnitt[2].equals("Löschen"))
					{
						for (int i = 0; i < Warenkörbe.size(); i++)
						{
							int abschnitt3= Integer.parseInt(abschnitt[3]);
							if(Warenkörbe.get(i).WKid()== abschnitt3)
							{
								Warenkörbe.remove(i);
							}
						}
					}
				}
			}
			else 
			{
				Rückgabe = ("Falsches Kommando");
			}
			
			for (int i = 0; i < Rückgabe.length(); i++) 
			{
				out.write(Rückgabe.charAt(i));
			}	
			out.flush();
			System.out.println(("Empfangen:  ") + build);
			System.out.println(("Gesendet:	 ") + Rückgabe);
			socket.close();
		}
		catch (Exception e) 
		{
		System.out.println("Fehler 3");
		}
	}
}

Client:

Java:
import java.io.*;
import java.net.*;

public class Client 
{

	public static void main(String[] args) 
	{
		String host = "http://localhost:8088";
		
		
		getservice("GET", host, "/Beschreibung/22545497/");
		getservice("GET", host, "/Beschreibung/12548947/");
		getservice("PUT", host, "/Warenkorb/Neu/");
		getservice("PUT", host, "/Warenkorb/Neu/");
		getservice("PUT", host, "/Warenkorb/Legen/1/22545497/");
		getservice("PUT", host, "/Warenkorb/Legen/1/12545497/");
		getservice("PUT", host, "/Warenkorb/Legen/1/12548947/");
		getservice("GET", host, "/Warenkorb/Zeigen/1/");
		getservice("DELETE", host, "/Warenkorb/Löschen/1/");
		getservice("PUT", host, "/Warenkorb/Legen/2/22545497/");
		getservice("GET", host, "/Warenkorb/Zeigen/1/");
		getservice("GET", host, "/Warenkorb/Zeigen/2/");
	}
	
	private static void getservice(String method, String host, String arg) {
		HttpURLConnection connection = null;
		OutputStreamWriter wr = null;
		BufferedReader rd = null;
		StringBuilder sb = null;
		String line = null;

		URL serverAddress = null;
		System.out.println("Anfrage: "+"\""+ method + " "+ arg +"\""+ "  an: " + host);
		try {
			serverAddress = new URL(host + arg);
			// set up out communications stuff
			connection = null;

			// Set up the initial connection
			connection = (HttpURLConnection) serverAddress.openConnection();
			connection.setRequestMethod(method);
			connection.setDoOutput(true);
			connection.setReadTimeout(5000);
			connection.setUseCaches(false);

			connection.connect();
			// get the output stream writer and write the output to the server
			// not needed in this example
			// wr = new OutputStreamWriter(connection.getOutputStream());
			// wr.write("");
			// wr.flush();

			// read the result from the server
			rd = new BufferedReader(new InputStreamReader(connection
					.getInputStream()));
			sb = new StringBuilder();

			while ((line = rd.readLine()) != null) {
				sb.append(line + '\n');
			}

			System.out.println("Antwort: " + '\n' + sb.toString());

		} catch (MalformedURLException e) {
			System.out.println(e.getMessage());
		} catch (ProtocolException e) {
			System.out.println(e.getMessage());
		} catch (IOException e) {
			System.out.println(e.getMessage());
		} finally {
			// close the connection, set all objects to null
			connection.disconnect();
			rd = null;
			sb = null;
			wr = null;
			connection = null;	
		}

	}
}
 

Runtime

Top Contributor

Lumaraf

Bekanntes Mitglied
Du ignorierst das HTTP-Protokoll einfach komplett in deinem Code, das kann so unmöglich funktionieren. Du mußt auch entsprechende HTTP Header zurückschicken. In der ersten Zeile muß die HTTP-Version stehen und ein Statuscode folgen. Danach kommen weiter Header wie z.b. die Länge des Bodys und ein Content-Type. Danach folgen zwei Zeilenumbrüche und dann kannst du deinen Inhalt schicken. Die Zeilenumbrüche müßen bei HTTP immer \r\n sein. Unter Hypertext Transfer Protocol ? Wikipedia gibts noch Beispiele zu den Headern die dir evtl weiterhelfen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
Y server client socket verbindung übers internet aufbauen Netzwerkprogrammierung 8
H Socket Client server,verbindung läst sich nicht abbauen&code optimierung Netzwerkprogrammierung 3
H Server und Client-keine verbindung über den localhost Netzwerkprogrammierung 6
B Verbindung zwischen Client und Server Netzwerkprogrammierung 2
F Java Client-Server-Client Verbindung Netzwerkprogrammierung 9
W Socket Client-Server Verbindung. Wie Strings senden? Netzwerkprogrammierung 6
T Server Client Verbindung halten ,wie? Netzwerkprogrammierung 3
R Server/Client Verbindung - Datei schreiben Netzwerkprogrammierung 15
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
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
P Server als Client nutzen Netzwerkprogrammierung 8
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
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
K C# Server - Android Client Netzwerkprogrammierung 0
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
E Thematik Client server Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
J Client Server - Serialisierung Netzwerkprogrammierung 8
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
K Client => Server Netzwerkprogrammierung 2
A ? Home-Network, Server/Client-Einrichtung Netzwerkprogrammierung 4
S Socket Server: ConnectionError vom Client erkennen Netzwerkprogrammierung 31
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
N Client-Server-Datenbank Netzwerkprogrammierung 13
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
B Client/Server Connection Problem Netzwerkprogrammierung 2
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
R Server zu Client Kommunikation Netzwerkprogrammierung 11
T Server und Client verbinden nicht Netzwerkprogrammierung 6
V Socket UDP Server/Client Kommunikation sehr langsam Netzwerkprogrammierung 2
das-mo Client/Server sendet nicht Netzwerkprogrammierung 7
Z Socket Server/Client vernünftiger Verbindungsabbruch Netzwerkprogrammierung 4
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
F TCP Server/Client Netzwerkprogrammierung 14
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
N eine klasse mit server & client Netzwerkprogrammierung 5
D RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling Netzwerkprogrammierung 12
S Socket Einfache Client/Server-Anwendung Netzwerkprogrammierung 11
F Socket Server/Client Kommunikation Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben