Datei über Server auslesen

Hallo,

ich möchte eine vorhandene Textdatei mittels Client/Server auslesen lassen.
Habs damit versucht aber es klappt leider nicht.

BufferedReader Anzeigenreader = new BufferedReader(new FileReader("Prüfpläne.txt"));

Wie muss ich bei der Client/Server Programmierung vorgehen?

MfG
 
Also meine erste Idee wäre erstmal die Umlaute zu entfernen. Wenn du dich im 'internationalen' Internet befindest, kann der Ascii-Wert des Umlautes auf einem anderen Rechner was ganz anderes bedeuten (oder nicht besetzt sein).
Ansonsten hätte ich noch die Frage, wo das Programm und die Textdatei sich befinden.

Wenn du gerade mit Applets arbeitest, dann wird das so nicht klappen, da diese nicht auf Files zugreifen können (die nicht auf dem Rechner liegen, auf dem sie ausgeführt werden (-> Server)). Hat den Hintergrund, dass wohl niemand Applets als Anwender zulassen würde, wenn man weiss, dass sie 'einfach mal so' an Dateien rumfuschen können.

Hoffe ich konnte ein paar Ideen zur Problemlösung spendieren ;)
 
Ich hab jetzt zuerst Mal einen kleinen Server und einen Client geschrieben um die Materie besser verstehen zu können.

Der Server wartet auf eine Antwort vom Client aber der Client sendet leider nichts woran kann das liegen?

Hier mein Coding:

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

public class TestServer
{
  public static void main(String[] args)
  {
    try
    {
      //Server starten
      ServerSocket server = new ServerSocket(1234);
      
      //warte auf Verbindung
      System.out.println("Warte auf Verbindung.");
      Socket s = server.accept();
      
      //neue Verbindung ist da, wir lesen einfach aus,
      //was sie uns so schickt und schicken dann alles in Großbuchstaben zurück
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      String text = in.readLine();
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      out.write(text.toUpperCase());
      out.newLine();
      out.flush();
      
      //aufräumen
      out.close();
      in.close();
      server.close();
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

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

public class TestClient
{
  //static int port = 1234;
  public static void main(String[] args)
  {
    try
    {
      //Socket auf Lokalhost Port 1234 konstruieren
      Socket s = new Socket("lokalhost", 1234);

      //etwas über den Socket versenden
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      out.write("Hallo");
      
      //Zeilenumbruch senden
      out.newLine();
      out.flush();
      
      //BufferedReader konstruieren
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      
      //eine Zeile lesen
      String text = in.readLine();
      
      //und ausgeben
      System.out.println("Received: ");
      System.out.println(text);
      
      //Reader und Writer schließen
      out.close();
      in.close();
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

Vielen Dank schon mal.
 
Hallo erstmal.
Ich habe mich in der letzten Zeit ein wenig mit Client/Server -Programmierung beschäftigt.
Habe beim googlen eine Seite gefunden die mir viel weitergeholfen hat.


link

Achja sinvoll ist das ganze dann noch mit Threads zu machen ;)

Achja. Auch hier im Forum gibt es mehrere Threads zu Client/Server-Anwendungen.
Suchen hilft manchmal ;) !

Viel Spaß noch !
Gruß Gora
 
Danke für Deine Hilfe,

das mit den Threads werde ich auch noch ausprobieren. Hab den Code jetzt erweitert und zwar möchte ich das was der Server empfängt an eine Textdatei senden und abspeichern.

Die Textdatei wird zwar erstellt aber es wird nichts darin geschrieben.

Muss ich das vielleicht über den Client machen?

Geänderter Server:
Code:
import java.io.*;
import java.net.*;

public class TestServer
{
  public static void main(String[] args)
  {
    try
    {
      //Server starten
      ServerSocket server = new ServerSocket(1234);
      
      //warte auf Verbindung
      System.out.println("Warte auf Verbindung.");
      Socket s = server.accept();
      
      //neue Verbindung ist da, wir lesen einfach aus,
      //was sie uns so schickt und schicken dann alles in Großbuchstaben zurück
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      String text = in.readLine();
      System.out.println("Nachricht empfangen: " + text);
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      BufferedWriter DBwriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Datenbank.txt", true)));
      DBwriter.newLine();
      DBwriter.write(text);
      out.write(text.toUpperCase());
      out.newLine();
      out.flush();
      
      //aufräumen
      out.close();
      in.close();
      server.close();
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

Gruß und nochmals vielen Dank.
 
Habe jetzt einen Client und einen Server erstellt, der in eine Textdatei was reinschreibt und einen anderen Client und Server der den Inhalt der Datei ausliest.

Kann man das auch kombinieren? So dass man nur einen Server hat und je nachdem welcher Client aufgerufen wird liest dieser dann aus der Datei aus oder schreibt in die Datei was rein?

Server speichern:
Code:
import java.io.*;
import java.net.*;

public class Server_in_Datei_speichern
{
  public static void main(String[] args)
  {
    try
    {
      //Server starten
      ServerSocket server = new ServerSocket(1234);

      //warte auf Verbindung
      System.out.println("Warte auf Verbindung.");
      Socket s = server.accept();
      System.out.println("Verbunden.");
      
      //neue Verbindung ist da, wir lesen einfach aus, was sie uns so schickt
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      String text = in.readLine();
      System.out.println("Nachricht empfangen: " + text);

      //schreibe empfangene Nachricht in die Datei "Datenbank.txt"
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Datenbank.txt", true)));
      out.write(text);
      out.newLine();
      out.flush();
      System.out.println("Empfange Nachricht wurde erfolgreich in die Datei 'Datenbank.txt' geschrieben.");
      
      //aufräumen
      out.close();
      in.close();
      server.close();
      System.out.println("Server geschlossen.");
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

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

public class Client_in_Datei_speichern
{
  public static void main(String[] args)
  {
    try
    {
      //Socket auf Lokalhost Port 1234 konstruieren
      Socket s = new Socket("localhost", 1234);

      //etwas über den Socket versenden
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      String versende = "Hallo";
      out.write(versende);
      System.out.println("Sende '" + versende + "' an Server Port 1234.");
      
      //Zeilenumbruch senden
      out.newLine();
      out.flush();
      
      //Writer schließen
      out.close();
      
      System.out.println("Beendet.");
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

Server auslesen:
Code:
import java.io.*;
import java.net.*;

public class Server_aus_Datei_lesen
{
  public static void main(String[] args)
  {
    try
    {
      //Server starten
      ServerSocket server = new ServerSocket(5678);

      //warte auf Verbindung
      System.out.println("Warte auf Verbindung.");
      Socket s = server.accept();
      System.out.println("Verbunden.");

      //neue Verbindung ist da, wir lesen einfach aus,
      //was sie uns so schickt und schicken alles wieder zurück
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      String text = in.readLine();
      System.out.println("Nachricht empfangen: " + text);
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      out.write(text);
      out.newLine();
      out.flush();

      System.out.println("Nachricht zurückgesendet.");

      //aufräumen
      out.close();
      in.close();
      server.close();
      System.out.println("Server geschlossen.");
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

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

public class Client_aus_Datei_lesen
{
  public static void main(String[] args)
  {
    try
    {
      //Socket auf Lokalhost Port 5678 konstruieren
      Socket s = new Socket("localhost", 5678);

      //aus der Datei "Datenbank.txt" auslesen und über den Socket versenden
      BufferedReader readin = new BufferedReader(new InputStreamReader(new FileInputStream("Datenbank.txt")));
      String versende = readin.readLine();
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      out.write(versende);
      System.out.println("Sende " + versende + " an Server Port 5678.");
      
      //Zeilenumbruch senden
      out.newLine();
      out.flush();
      
      //BufferedReader konstruieren
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      
      //eine Zeile lesen
      String text = in.readLine();
      
      //und ausgeben
      System.out.println("Received: ");
      System.out.println(text);
      
      //Reader und Writer schließen
      readin.close();
      out.close();
      in.close();
      
      System.out.println("Beendet.");
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

Vielen Dank im Voraus.
 
Ok vielen Dank.

Sieht jetzt so aus. Es läuft auch soweit ganz gut.
Leider wird auf der Server-Konsole jedes Mal folgendes ausgegeben.

Der Befehl "n_Datei_speichern" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

Und im Konsolenfenster des Clients "Client_in_Datei_speichern" wird leider nicht "Fertig" ausgegeben sondern "Fehler".

Im Konsolenfenster des "Client_aus_Datei_lesen" zwar "Beendet" ausgegeben aber "Fertig" fehlt auch hier.

Muss man das wegen den zwei If-Schleifen mit Threads machen, oder liegt es nicht daran?

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

public class Server
{
  public static void main(String[] args)
  {
    try
    {
      //Server starten
      ServerSocket server = new ServerSocket(1234);

      //warte auf Verbindung
      System.out.println("Warte auf Verbindung.");
      Socket s = server.accept();
      System.out.println("Verbunden.");

      //neue Verbindung ist da, wir lesen einfach aus,
      //was sie uns so schickt und schicken alles wieder zurück
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      String text = in.readLine();
      String [] MessageSplit = text.split("§");
      String Befehl = MessageSplit[0];
      String Nachricht = MessageSplit[1];
      String Befehlspeichern = "speichern";
      String Befehllesen = "lesen";

      if (Befehl.equals(Befehlspeichern))
      {
        System.out.println("1");
        System.out.println("Befehl: " + Befehl);
        System.out.println("Nachricht empfangen: " + Nachricht);
        BufferedWriter outspeichern = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Datenbank.txt", true)));
        outspeichern.write(Nachricht);
        outspeichern.newLine();
        outspeichern.flush();
        System.out.println("Empfange Nachricht wurde erfolgreich in die Datei 'Datenbank.txt' geschrieben.");
        outspeichern.close();
      }

      else
      {
        if (Befehl.equals(Befehllesen))
        {
          System.out.println("2");
          System.out.println("Befehl: " + Befehl);
          System.out.println("Nachricht empfangen: " + Nachricht);
          BufferedWriter outlesen = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
          outlesen.write(Nachricht);
          outlesen.newLine();
          outlesen.flush();
          System.out.println("Nachricht zurückgesendet.");
          outlesen.close();
        }
      }
      
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      out.write("Fertig");
      out.newLine();
      out.flush();
      
      //aufräumen
      out.close();
      in.close();
      server.close();
      System.out.println("Server geschlossen.");
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

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

public class Client_in_Datei_speichern
{
  public static void main(String[] args)
  {
    try
    {
      //Socket auf Lokalhost Port 1234 konstruieren
      Socket s = new Socket("localhost", 1234);

      //etwas über den Socket versenden
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      String speichern = "speichern§";
      String versenden = "Hallo";
      out.write(speichern);
      out.write(versenden);
      System.out.println("Sende '" + versenden + "' an Server Port 1234.");
      
      //Zeilenumbruch senden
      out.newLine();
      out.flush();
      
      //Writer schließen
      out.close();
      
      //erhält Nachricht vom Server das der Vorgang bearbeitet wurde
      BufferedReader inServer = new BufferedReader(new InputStreamReader(s.getInputStream()));
      String ServerNachricht = inServer.readLine();
      inServer.close();
      
      System.out.println("Beendet.");
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

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

public class Client_aus_Datei_lesen
{
  public static void main(String[] args)
  {
    try
    {
      //Socket auf Lokalhost Port 5678 konstruieren
      Socket s = new Socket("localhost", 1234);

      //aus der Datei "Datenbank.txt" auslesen und über den Socket versenden
      BufferedReader readin = new BufferedReader(new InputStreamReader(new FileInputStream("Datenbank.txt")));
      String versenden = readin.readLine();
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      String lesen = "lesen§";
      out.write(lesen);
      out.write(versenden);
      System.out.println("Sende " + versenden + " an Server Port 1234.");
      
      //Zeilenumbruch senden
      out.newLine();
      out.flush();
      
      //BufferedReader konstruieren
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      
      //eine Zeile lesen
      String text = in.readLine();
      
      //und ausgeben
      System.out.println("Empfangen: " + text);
      in.readLine();
      
      //Reader und Writer schließen
      readin.close();
      out.close();
      in.close();
      
      System.out.println("Beendet.");
    }
    catch (Exception e)
    {System.out.println("Fehler");}
  }
}

Vielen Dank.
 
Zurück