Server - Client hänger

Poehli

Mitglied
Hallo Leute,
ich bin neu hier im Forum, also hinterlasst einen guten Eindruck ;)
Spaß beiseite:
Ich habe mich endlich an die Server - Client Programmierung gewagt. Mein Problem liegt nun darin, dass der Client den Server ohne weiteres ansprechen kann. Ich sende ihm die Information die der Server braucht (Dateinamen) und der bearbeitet das auch schön. Wenn ich jetzt aber die Ausgabe der Datei an den Client schicken will, wartet dieser ewig auf ein Signal (denke ich zumindest, da er bei read die ganze Zeit hängt). Das würde ja bedeuten, dass der Server nicht mit dem Client kommunizieren kann. Jedoch habe ich dies mit den verschiedensten Socket Methoden ausprobiert, die alle zu funktionieren scheinen. Hier ist mal mein Möchtegernserver ;)

Code:
public class Server {
	public static void main(String[] args) throws IOException {
		ServerSocket serverso = new ServerSocket(8181);
		while(true){ 
			Socket so = serverso.accept();
			System.out.println(
					so.getOutputStream().toString());
			BufferedReader vomClient = new BufferedReader(new InputStreamReader(so.getInputStream()));

			BufferedWriter zumClient = new BufferedWriter(new OutputStreamWriter(so.getOutputStream()));
			try {
				String kommandozeile = vomClient.readLine();
				BufferedReader dateiLeser = dateiOeffnen(kommandozeile);


				int c = dateiLeser.read();
				System.out.println();
				while (c != -1){
					System.out.print(""+(char)c);
					zumClient.newLine();
					zumClient.write(c);
					c = dateiLeser.read();
				}

				dateiLeser.close();
			} catch (Exception e){
				e.printStackTrace();
				System.out.println("Fehler!");
				new PrintWriter(zumClient).println("Fehler");
			}
		}
	}

	private static BufferedReader dateiOeffnen(String zeile) throws Exception{
		System.out.println("Folgende Datei: "+zeile);
		StringTokenizer stok = new StringTokenizer(zeile, " \r\n");
		String cmd = stok.nextToken();
		String dateiName = stok.nextToken();
		if ( cmd.equals("GET"))
			return new BufferedReader( new FileReader(dateiName));
		else
			throw new Exception("Syntaxfehler im cmd");
	}
}


Und der Client:
Code:
public class Client {
	public static void main(String[] args) throws UnknownHostException, IOException{		
		String rechneradresse = args[0];
		String dateiname = args[1];
		
		Socket so = new Socket(rechneradresse, 8181);
		
		BufferedReader vomServer = new BufferedReader(new InputStreamReader(so.getInputStream()));
		
		PrintWriter zumServer = new PrintWriter(new OutputStreamWriter(so.getOutputStream()));
		
		zumServer.println("GET " + dateiname);
		zumServer.flush();
		System.out.println("waiting...");
		int c = vomServer.read();
		int i = 0;
		while (c != -1){
			System.out.println(""+(char) c);
			c = vomServer.read();
			System.out.println("duchlauf:" + i++);
		}
		}
}
 
Ahh vielen Dank, das hat das Problem gelöst!
Nach hinreichender Googelei, hoffe ich verstanden zu haben warum :p
 
Zurück