A
Ahnungslos10
Gast
Hallo zusammen...
Ich habe hier ein Programm, das über Pipes Daten hin und herschiebt. Es handelt sich hierbei um eine Adressverwaltung. Nun soll es so umgebaut werden, dass es über Sockets (Server/Clients) läuft. Leider hab ich sehr wenig Ahnung, wie das ganze ablaufen soll. Ich hatte mich auch auf diversen Homepages umgeschaut, aber werde hieraus einfach nicht schlau
Kann mir da jemand Denkanstöße geben?
Anbei die einzelnen Klassen
[Java]
import java.io.*;
//@author X
public class Model extends Thread
{
PipedWriter out;
PipedReader in;
Adresse array[]=new Adresse[0];
/**Diese Methode dient zum Speichern der erst eingegebenen und dann
im Array abgelegten und aufgelisteten Adressdaten*/
public void speicher(Adresse[] array)
{
try {
RandomAccessFile rafile = new RandomAccessFile("adreli.csv","rw");
for (int i=0; i<array.length;i++)
{
rafile.writeBytes(array.getDaten());
}
rafile.close ();
}
catch (FileNotFoundException fnfex)
{
System.out.println(fnfex.getMessage());
}
catch (IOException ioex)
{
System.out.println(ioex.getMessage());
}
eingabe("h");
}
/**Diese Methode dient dazu, dass man die gespeicherten Daten
laden kann um sie dann aufzulisten*/
public Adresse[] lesen()
{
Adresse[] a = new Adresse[0];
try
{
RandomAccessFile rafile = new RandomAccessFile("adreli.csv","rw");
for(int i = 0;true;i++)
{
String s = rafile.readLine();
if (s==null)
{
break;
}
a = add(a, new Adresse(s));
}
}
catch (FileNotFoundException fnfex)
{
System.out.println(fnfex.getMessage());
}
catch (IOException ioex)
{
System.out.println(ioex.getMessage());
}
eingabe("h");
return a;
}
/**Erweiterung des Arrays um 1*/
public Adresse[] add(Adresse[] a, Adresse c)
{
Adresse[] r = new Adresse[a.length+1];
for(int i = 0; i<a.length;i++)
{
r=a;
}
r[a.length]=c;
return r;
}
/**Löschen der Datei*/
public void loeschen()
{
File rafile = new File("adreli.csv");
if(rafile.exists())
{
rafile.delete();
}
eingabe("h");
}
/**Der Konstruktor ruft mit SUPER den Konstruktor
* der Basis- Klasse auf und übergibt Parameter*/
public Model(PipedWriter out, PipedReader in)
{
super();
this.in = in;
this.out = out;
}
/**In der Methode wird der Thread der Benutzerseite gestartet.*/
public void run()
{
while(true)
{
int a = Integer.parseInt(ausgabe());
switch(a)
{
case 1:array= this.add(array,new Adresse());eingabe("h");break;
case 2:
if(array.length>0)
{
for (int i = 0; i<array.length; i++) array.Ausgabe();
eingabe("h");
}
break;
case 3:array = lesen();break;
case 4:speicher(array);break;
case 5:loeschen();break;
case 6:System.exit(0);break;
}
}
}
/**Die Methode kommuniziert mit der Pipe.*/
public void eingabe(String s)
{
try
{
this.out.write(s+"\n");
}
catch (IOException e)
{
System.out.println("Verbindungsfehler!");
}
}
/**Die Methode kommuniziert mit der Pipe.*/
public String ausgabe()
{
char c = (char) 0;
String s = "";
do
{
try
{
if (in.ready())
{
c = (char) in.read();
}
s = s + c;
}
catch (IOException e)
{
System.out.println("Verbindungsfehler!");
}
} while (c != '\n');
return(s.trim());
}
}
[/code]
Danke im Voraus
Ich habe hier ein Programm, das über Pipes Daten hin und herschiebt. Es handelt sich hierbei um eine Adressverwaltung. Nun soll es so umgebaut werden, dass es über Sockets (Server/Clients) läuft. Leider hab ich sehr wenig Ahnung, wie das ganze ablaufen soll. Ich hatte mich auch auf diversen Homepages umgeschaut, aber werde hieraus einfach nicht schlau
Kann mir da jemand Denkanstöße geben?
Anbei die einzelnen Klassen
Java:
import java.io.*;
//@author X
public class Controller extends Thread
{
//In der Main Methode werden die Threads und die Pipes initialisiert.
public static void main(String[]args)
{
try
{
PipedReader pr1=new PipedReader();
PipedWriter pw1=new PipedWriter();
pw1.connect(pr1);
PipedReader pr2=new PipedReader();
PipedWriter pw2=new PipedWriter();
pw2.connect(pr2);
View t1=new View(pw1, pr2);
Model t2=new Model(pw2, pr1);
t1.start();
t2.start();
}
catch(IOException io)
{
System.out.println("Fehler beim Verbinden der Pipe");
}
}
}
[Java]
import java.io.*;
//@author X
public class Model extends Thread
{
PipedWriter out;
PipedReader in;
Adresse array[]=new Adresse[0];
/**Diese Methode dient zum Speichern der erst eingegebenen und dann
im Array abgelegten und aufgelisteten Adressdaten*/
public void speicher(Adresse[] array)
{
try {
RandomAccessFile rafile = new RandomAccessFile("adreli.csv","rw");
for (int i=0; i<array.length;i++)
{
rafile.writeBytes(array.getDaten());
}
rafile.close ();
}
catch (FileNotFoundException fnfex)
{
System.out.println(fnfex.getMessage());
}
catch (IOException ioex)
{
System.out.println(ioex.getMessage());
}
eingabe("h");
}
/**Diese Methode dient dazu, dass man die gespeicherten Daten
laden kann um sie dann aufzulisten*/
public Adresse[] lesen()
{
Adresse[] a = new Adresse[0];
try
{
RandomAccessFile rafile = new RandomAccessFile("adreli.csv","rw");
for(int i = 0;true;i++)
{
String s = rafile.readLine();
if (s==null)
{
break;
}
a = add(a, new Adresse(s));
}
}
catch (FileNotFoundException fnfex)
{
System.out.println(fnfex.getMessage());
}
catch (IOException ioex)
{
System.out.println(ioex.getMessage());
}
eingabe("h");
return a;
}
/**Erweiterung des Arrays um 1*/
public Adresse[] add(Adresse[] a, Adresse c)
{
Adresse[] r = new Adresse[a.length+1];
for(int i = 0; i<a.length;i++)
{
r=a;
}
r[a.length]=c;
return r;
}
/**Löschen der Datei*/
public void loeschen()
{
File rafile = new File("adreli.csv");
if(rafile.exists())
{
rafile.delete();
}
eingabe("h");
}
/**Der Konstruktor ruft mit SUPER den Konstruktor
* der Basis- Klasse auf und übergibt Parameter*/
public Model(PipedWriter out, PipedReader in)
{
super();
this.in = in;
this.out = out;
}
/**In der Methode wird der Thread der Benutzerseite gestartet.*/
public void run()
{
while(true)
{
int a = Integer.parseInt(ausgabe());
switch(a)
{
case 1:array= this.add(array,new Adresse());eingabe("h");break;
case 2:
if(array.length>0)
{
for (int i = 0; i<array.length; i++) array.Ausgabe();
eingabe("h");
}
break;
case 3:array = lesen();break;
case 4:speicher(array);break;
case 5:loeschen();break;
case 6:System.exit(0);break;
}
}
}
/**Die Methode kommuniziert mit der Pipe.*/
public void eingabe(String s)
{
try
{
this.out.write(s+"\n");
}
catch (IOException e)
{
System.out.println("Verbindungsfehler!");
}
}
/**Die Methode kommuniziert mit der Pipe.*/
public String ausgabe()
{
char c = (char) 0;
String s = "";
do
{
try
{
if (in.ready())
{
c = (char) in.read();
}
s = s + c;
}
catch (IOException e)
{
System.out.println("Verbindungsfehler!");
}
} while (c != '\n');
return(s.trim());
}
}
[/code]
Java:
import java.util.regex.*;
//@author X
public class Adresse
{
String anrede;
String name;
String vorname;
String strasse;
String plz;
String ort;
String telefon;
String fax;
String bemerkung;
String datenOk;
/**Methode zum Speichern in der Datei*/
public String getDaten()
{
String record;
record=anrede+";"+name+";"+vorname+";"+strasse+";"+plz+";"+ort+
";"+telefon+";"+fax+";"+bemerkung+"\r\n";
return record;
}
/**Eingabe der Adressdaten mit Aufruf zur Prüfung auf festgelegte Syntaktische Korrektheit*/
Adresse()
{
System.out.println("Bitte geben Sie die Daten ein:");
System.out.println();
anrPruefen();
nPruefen();
nachnPruefen();
strPruefen();
plzPruefen();
ortPruefen();
telPruefen();
faxPruefen();
bemerPruefen();
pruefeEingaben();
System.out.println();
}
/**Ausgabe der gespeicherten Daten*/
public void Ausgabe()
{
System.out.println("Anrede: "+anrede);
System.out.println("Name: "+name);
System.out.println("Vorname: " +vorname);
System.out.println("Strasse: "+strasse);
System.out.println("PLZ: "+plz);
System.out.println("Ort: "+ort);
System.out.println("Telefon: "+telefon);
System.out.println("FAX: "+fax);
System.out.println("Bemerkung: "+bemerkung);
System.out.println();
StdInput.readString("Enter Druecken!");
}
/**Aufsplittung der in der Datei gespeicherten Daten*/
Adresse(String s)
{
String[] a = s.split(";");
anrede = a[0];
name = a[1];
vorname = a[2];
strasse = a[3];
plz = a[4];
ort = a[5];
telefon = a[6];
fax = a[7];
bemerkung = a[8];
}
public void pruefeEingaben()
{
System.out.println();
System.out.println("Anrede: "+anrede);
System.out.println("Name: "+name);
System.out.println("Vorname: " +vorname);
System.out.println("Strasse: "+strasse);
System.out.println("PLZ: "+plz);
System.out.println("Ort: "+ort);
System.out.println("Telefon: "+telefon);
System.out.println("FAX: "+fax);
System.out.println("Bemerkung: "+bemerkung);
System.out.println();
boolean n;
// Abfrage, sind alle Eingaben korrekt?
System.out.println("Sind die Eingaben korrekt?(Ja/Nein) ");
datenOk = StdInput.readString();
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("(Ja|ja|J|j)", datenOk);
// wird nicht mit Ja, ja, J oder j geantwortet muss man alle Eingaben wiederholen!
if (n == false)
{
System.out.println("Bitte geben Sie die Daten ein:");
System.out.println();
anrPruefen();
nPruefen();
nachnPruefen();
strPruefen();
plzPruefen();
ortPruefen();
telPruefen();
faxPruefen();
bemerPruefen();
System.out.println();
pruefeEingaben();
System.out.println();
}
else
{
System.out.println("Möchten sie eine weitere Person aufnehmen?(Ja/Nein) ");
datenOk = StdInput.readString();
{
n = Pattern.matches("(Ja|ja|J|j)", datenOk);
if (n == true)
{
System.out.println("Bitte geben Sie die Daten ein:");
System.out.println();
anrPruefen();
nPruefen();
nachnPruefen();
strPruefen();
plzPruefen();
ortPruefen();
telPruefen();
faxPruefen();
bemerPruefen();
System.out.println();
pruefeEingaben();
System.out.println();
}
}
}
}
}
/** Prüfen der Eingaben mit pattern matches*/
public String anrPruefen()
{
boolean n;
// Eingabe der Anrede
System.out.println("Anrede: ");
anrede = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("(Herr|Frau|Dr|Prof|Prof Dr)", anrede);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Anrede nicht korrekt!");
System.out.println("Anrede: ");
anrede = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return anrede;
}
public String nPruefen()
{
boolean n;
// Eingabe des Vornamens
System.out.println("Vorname: ");
vorname = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("[A-Z]([a-z]+)((([ ]?)([-]?)"
+ "([A-Za-z]))+)", vorname);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Bitte überprüfen Sie Ihre Eingabe!");
System.out.println("Vorname: ");
vorname = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return vorname;
}
public String nachnPruefen()
{
boolean n;
// Eingabe des Nachnamens
System.out.println("Nachname: ");
name = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("[A-Z]([a-z]+)((([ ]?)"
+ "([-]?)([A-Za-z]))+)", name);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Bitte überprüfen Sie Ihre Eingabe");
System.out.println("Nachname: ");
name = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return name;
}
public String strPruefen()
{
boolean n;
// Eingabe der Straße
System.out.println("Strasse: ");
strasse = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("[A-Z]((([a-zA-Z])+)(([."
+ "]?)([ ]?)([-]?)?))*[0-9]{1,3}[a-zA-Z]?", strasse);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Bitte überprüfen Sie Ihre Eingabe!");
System.out.println("Strasse: ");
strasse = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return strasse;
}
public String plzPruefen()
{
boolean n;
// Eingabe der PLZ
System.out.println("Plz: ");
plz = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("([0-9]){5,5}", plz);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Ihre PLZ hat nicht das richtige Format!");
System.out.println("Plz: ");
plz = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return plz;
}
/** Diese Methode dient dazu, die Eingegebenen
* Daten auf Ihre Syntaktische Richtigkeit zu prüfen
*/
public String ortPruefen()
{
boolean n;
// Eingabe des Ortes
System.out.println("Ort: ");
ort = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("[A-Z]([a-z]+)((([ ]?)([-]?)"
+ "([A-Za-z]))+)", ort);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Bitte überprüfen Sie Ihre Eingabe!");
System.out.println("Ort: ");
ort = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return ort;
}
public String telPruefen()
{
boolean n;
// Eingabe der Telefonnummer
System.out.println("Telefon: ");
telefon = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("(([0-9]{4,6})(([ ]?)([-]?)([/]?)"
+ "(([0-9]){3,9})))|([0-9]{7,15})", telefon);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Ihre TelNr. hat das falsche Format!");
System.out.println("Telefon: ");
telefon = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return telefon;
}
public String faxPruefen()
{
boolean n;
// Eingabe der FAX Adresse
System.out.println("FAX: ");
fax = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("(([0-9]{4,6})(([ ]?)([-]?)([/]?)"
+ "(([0-9]){3,9})))|([0-9]{7,15})", telefon);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Ihre FAX-Nummer besitzt nicht das richtige Format!");
System.out.println("FAX: ");
fax = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return fax;
}
public String bemerPruefen()
{
boolean n;
// Eingabe der Bemerkung
System.out.println("Bemerkung: ");
bemerkung = StdInput.readString();
do
{
// Eingabe wird auf syntaktische Korrektheit überprüft
n = Pattern.matches("[A-Za-z]*(([.]?)([ ]?)" + "([-]?)([/]?)([A-Za-z]))*|([ ]?)*", bemerkung);
// Eingabe syntaktisch nicht korrekt, Anzeige von "Fehlermeldung"
if (n == false)
{
System.out.println("Ihre Eingabe war im falschen Format!");
System.out.println("Bemerkung: ");
bemerkung = StdInput.readString();
}
}
while (n == false);
// Falls die Eingabe korrekt --> Programm wird weitergeführt
return bemerkung;
}
}
Java:
import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;
//@author X
public class View extends Thread
{
PipedWriter out;
PipedReader in;
/**Die Methode stellt das Menü bereit und sendet
* Usereingaben über die Pipe nach Daten.*/
public void menue()
{
System.out.println("ADRELI - Adressverwaltung");
System.out.println();
System.out.println("Wollen Sie...");
System.out.println();
System.out.println("eine neue Person aufnehmen: 1");
System.out.println("Datensaetze auflisten: 2");
System.out.println("Datensaetze aus einer Datei laden: 3");
System.out.println("Datensaetze in eine Datei sichern: 4");
System.out.println("Datei loeschen: 5");
System.out.println("Das Programm verlassen: 6");
System.out.println();
String a;
a=StdInput.readString("Geben Sie eine Aktion ein ");
System.out.println();
eingabe(a);
}
/**Der Konstruktor ruft mit SUPER den Konstruktor
* der Basis- Klasse auf und übergibt Parameter*/
public View(PipedWriter out, PipedReader in)
{
super();
this.in = in;
this.out = out;
}
/**In der Methode wird der Thread des Menüs gestartet.*/
public void run()
{
menue();
while (true)
{
if(ausgabe().equals("h")) menue();
}
}
/**Die Methode kommuniziert mit der Pipe.*/
public void eingabe(String s)
{
try
{
this.out.write(s+"\n");
}
catch (IOException e)
{
System.out.println("Verbindungsfehler!");
}
}
/**Die Methode kommuniziert mit der Pipe.*/
public String ausgabe()
{
char c = (char) 0;
String s = "";
do
{
try
{
if (in.ready())
{
c = (char) in.read();
}
s = s + c;
}
catch (IOException e)
{
System.out.println("Verbindungsfehler!");
}
} while (c != '\n');
return(s.trim());
}
}
Danke im Voraus