Probleme bei der Socketprogrmmierung,File Dateien lesen übergeben!

wildsoul

Mitglied
Sehr geehrte Damen und Herren,

Ich habe ein folgendes Problem...

Meine Fragestellung lautet: Erweitern Sie Ihr Client/Server Programm so, dass der Client folgende Ressource vom Server erfragen kann (Punkte 34):
- Client übergibt einen beliebigen Pfad an den Server (z.B. C:/test.txt)
- Server prüft ob diese Datei auf dem Server existiert
- Falls nicht, macht der Server den Client darauf aufmerksam „Datei existiert nicht“
- Falls doch, gibt der Server dem Client den Inhalt dieser Datei zurück.

bis auf alle Punkte habe ich es geschafft, bei mir ist das Problem, dass er die Dateien byte (binär) ausgibt, aber dieser Text muss doch lesbar sein, wer kann mir helfen diesen Text als normaler char auszugeben, oder ne andere Methode wie man das macht!

Hier ist der Quellcode zu client:

Code:
package dateianfrage;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class fclient {
	public static void main(String[] args) throws IOException {
		Socket socket = null; // repräsentiert die Verbindung zum Server
		BufferedReader in = null; // über dieses Objekt lesen wir die Nachrichten des Servers
		PrintWriter out = null; //über dieses Objekt schreiben wir Nachrichten an den Server	
		String filename = null;
		byte[] ausgabe;
		
		try {
			socket = new Socket("127.0.0.1", 4711);
			out = new PrintWriter(socket.getOutputStream(), true);
			in = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			System.out.println("\nBitte den Pfad eingeben(z.B 'C:/dateiname') ");
			filename=input.zinput();
			out.println(filename);
			while ((ausgabe = in.readLine().getBytes()) != null) {
				System.out.println(ausgabe);
			}
			
		} catch (UnknownHostException e) {
			System.err.println("kenne den hostnamen nicht");
			System.exit(1);
		} catch (IOException e) {
			System.err.println("Ich kann leider nichts lesen");
			System.exit(1);
		}
		in.close();
		socket.close();
	}

}

Und zu SERVER:

Code:
package dateianfrage;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class fserver {
	public static void main(String[] args) throws IOException {

		try {
			String filename = null;
			byte[] gelesen = null;
			 //int gelesen ;
			// FileReader r = null;
			System.out.println(" Warte auf Verbindung auf Port 4711...");
			ServerSocket echod = new ServerSocket(4711);
			Socket socket = echod.accept();
			System.out.println("Verbindung hergestellt");

			PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
			BufferedReader in = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			
			filename = in.readLine();
			if ((filename.startsWith("C:")) || (filename.startsWith("c:")))  {
				BufferedReader buf = new BufferedReader(new FileReader(filename));
				while ((gelesen = buf.readLine().getBytes()) != null) {
					out.println(gelesen);
				}
				
			
				/*while ((gelesen = buf.read()) != -1) {
				//System.out.print((char) gelesen);
					
				out.print((char) gelesen);
			}*/
			} else {
				System.out.println("Datei existiert nicht");
			}
			System.out.println("Verbindung beenden");
			socket.close();
			echod.close();
		} catch (IOException e) {
			System.out.println("vom Server: nicht gelesen");
			System.err.println(e.toString());
			System.exit(1);
		}

	}

}

Ich hoffe jemand kann mir helfen :confused: !
 
Ganz einfach:
Java:
in.readLine().getBytes()

Was willst du mit den Bytes?
readLine gibt dir doch einen String zurück. Diesen kannst du dann einerseits vom Server mit out.println an den Client zurückschicken und der Client kann dies auf der Console ausgeben.

Lass einfach das getBytes weg und ändere die Typen der variablen an diesen Stellen auf String und es klappt wunderbar.
 
Danke mann, oh man, das gibts doch nicht, so ein leichtsinniger fehler!
Ich hab vorher mit string versucht, aber jetzt gehts irgendwie danke schöN!
 
Zurück