Hallo alle zusammen!
Wir müssen so ein Program schreiben, das eine Verkaufsbörse implementiert. Daher müssen wir jetzt ein Server implementieren, der Zugriff auf einem Datenbank hat und ein Client, der sich mittels sockets mit dem Server verbindet. Ferner müssten wir verschieden funktionen implementieren für Nutzer und für Admin und so weiter. Ich habe alles implementiert, aber mein Problem ist, dass das Program nicht immer funktioniert. Also manchmal stürzt sie einfach nach dem passwort eingeben ab. Manchmal nicht. Manchmal stürzt sie beim auswählen von case. Und wie gesagt manchmal funktioniert alles einwandfrei. Es wäre ganz nett wenn mir jemand sagt oder darauf hinweist wieso das ein problem ist...
Da ist eine Beispielausgabe aus dem Client, wenn was schief geht:
Und hier ist es wenn es zumindest teilweise funktioniert:
Und hier geht schon wieder was schief, weil der nicht weiter mit der Passwortabfrage macht:
Und zum Beispiel SO sollte es immer aussehen bei jedem starten vom Programm:
Ich gebe hier erstmal einfach mein Server Classe und mein Client Classe, und wenn nötig oder gebraucht auch die Artikel, Nutzer und DB Classen.(aber da gibt's keine Probleme)
Also das hier soll mein Server sein:
Und das hier ist mein Client:
Da ich es morgen schon vorzeigen kann bitte ich um eine schnelle Antwort
Sonst werde ich hoffen, dass ich einfach Glück habe und, dass alles mindest einmal funktionieren würde.
Da ist eine Beispielausgabe aus dem Client, wenn was schief geht:
Code:
Bitte Loginnamen oder 'neu' fuer einen neuen Nutzer eingeben:
al4enguz@gmail.com
Bitte passwort eingeben:
parola
Code:
Bitte Loginnamen oder 'neu' fuer einen neuen Nutzer eingeben:
al4enguz@gmail.com
Bitte passwort eingeben:
parola
Willkommen, Sie haben sich als Admin eingelogt! Was wollen sie tun? Bitte geben sie die entsprechende Zahl an: 1. Auflisten von nutzern, 2. abmelden, 3. Angebot herausnehmen oder 4. nutzer suspendieren
2
Sie haben sich erfolgreich abgemeldet.
Und hier geht schon wieder was schief, weil der nicht weiter mit der Passwortabfrage macht:
Code:
Bitte Loginnamen oder 'neu' fuer einen neuen Nutzer eingeben:
312yhnj
Bitte passwort eingeben:
24yhtn
Login Failed.
Bitte Loginnamen oder 'neu' fuer einen neuen Nutzer eingeben:
al4enguz@gmail.com
Und zum Beispiel SO sollte es immer aussehen bei jedem starten vom Programm:
Code:
Bitte Loginnamen oder 'neu' fuer einen neuen Nutzer eingeben:
2162yh
Bitte passwort eingeben:
326yhn
Login Failed.Bitte Loginnamen oder 'neu' fuer einen neuen Nutzer eingeben:
al4enguz@gmail.com
Bitte passwort eingeben:
parola
Willkommen, Sie haben sich als Admin eingelogt! Was wollen sie tun? Bitte geben sie die entsprechende Zahl an: 1. Auflisten von nutzern, 2. abmelden, 3. Angebot herausnehmen oder 4. nutzer suspendieren
2
Sie haben sich erfolgreich abgemeldet.
Ich gebe hier erstmal einfach mein Server Classe und mein Client Classe, und wenn nötig oder gebraucht auch die Artikel, Nutzer und DB Classen.(aber da gibt's keine Probleme)
Also das hier soll mein Server sein:
Java:
import java.io.*;
public class Datenbankserververbindung {
public static void delartikel(String artikelid){
DB.sende("DELETE FROM Artikel WHERE artikelid = " + artikelid + ";");
}
public static void delnutzer(String email){
DB.sende("DELETE FROM Nutzer WHERE email = '" + email + "';");
}
public static void main(String[] args) {
Datenbankserververbindung server = new Datenbankserververbindung();
try {
server.login();
} catch (IOException e) {
e.printStackTrace();
}
}
void login() throws IOException {
int port = 11111;
java.net.ServerSocket serverSocket = new java.net.ServerSocket(port);
java.net.Socket client = warteAufAnmeldung(serverSocket);
int i = 1;
while(i == 1){ //falls neuer benutzer kann er sich gleich nach erstellen einloggen
schreibeNachricht (client, "Bitte Loginnamen oder 'neu' fuer einen neuen Nutzer eingeben: ");
String email = leseNachricht(client);
String passwort = "";
String abgleich = "";
String nutzer = "";
if(!(email.equals("neu"))){
schreibeNachricht(client, "Bitte passwort eingeben: ");
passwort = leseNachricht(client); //client 118
abgleich = DB.erhalte("select passwort from Nutzer where email = '" + email + "';");
nutzer = DB.erhalte("select vorname from Nutzer where email = '" + email + "';"); //für willkommen
String s = "pwfalse";
if(passwort.equals(abgleich)) s = "pwcorrect";
schreibeNachricht(client, s);
}
if (!(email.equals("neu"))){ //falls neuer benutzer wird erst neues konto erstellt siehe unten
if (passwort.equals(abgleich)&&!(email.equals("al4enguz@gmail.com"))){ //nur login hier falls nicht admin
boolean schleife = true;
while(schleife){
schreibeNachricht(client, "Willkommen, " + nutzer + "!Was wollen sie tun? Bitte geben sie die entsprechende Zahl an: 1. neues Angebot, 2. abmelden oder 3. Daten andern");
String eingabe = leseNachricht(client);
int x = Integer.valueOf(eingabe).intValue();
switch (x){
case 1: String angeboterstellen = leseNachricht(client);
//Artikel neu = new Artikel(angeboterstellen + Verkaufer + - + 1);
//TODO Dateien auf dem Datenbank senden.
DB.sende("insert into Artikel (kurzeBeschr, langeBeschr, gewicht, anzahl, mwst, bruttoPreis, nettoPreis, ablaufdatum, verkaufer, kaufer, angebot) values ( " + angeboterstellen + "'" + email + "', '-', " + "1);");
schreibeNachricht(client, "Artikel wurde erfolgreich erstellt.");
//angebot erstellen mit dem datenbank dingsda machen damit wir es dorthin schreiben
break;
case 2: schleife = false; //TODO Abmeldebestatigung
String abmelden = "Sie haben sich erfolgreich abgemeldet.";
schreibeNachricht(client, abmelden);
break;
case 3:
String datenandern = leseNachricht(client);
DB.sende(datenandern);
schreibeNachricht(client, "Eure Daten wurden erfolgreich geändert.");
//personendaten andern
break;
default: schreibeNachricht(client, "Invalides Zahl!");
break;
}
}
i=2; //äussere while schleife beenden
} else if (email.equals("al4enguz@gmail.com") & passwort.equals("parola")){
boolean schleife = true;
while(schleife){
//TODO hier kommt alles rein EINFACHE KOMMUNIKATION MIT DEN nutzerN ERSTELLEN!!!
schreibeNachricht(client, "Willkommen, Sie haben sich als Admin eingelogt! Was wollen sie tun? Bitte geben sie die entsprechende Zahl an: 1. Auflisten von nutzern, 2. abmelden, 3. Angebot herausnehmen oder 4. nutzer suspendieren");
String eingabe = leseNachricht(client);
int x = Integer.valueOf(eingabe).intValue();
switch (x){
case 1: //String angeboterstellen = leseNachricht(client);
//TODO Auflisten und kommunikation mit nutzern, die online sind. kA wie das geht!.
//schreibeNachricht(client, angeboterstellen); //"Angebot erfolgreich gestellt."
break;
case 2: schleife = false; //TODO Abmeldebestatigung
String abmelden = "Sie haben sich erfolgreich abgemeldet.";
schreibeNachricht(client, abmelden);
break;
case 3: schreibeNachricht(client, "Welchen Artikel wollen sie löschen? (ArtikelID angeben)");
String id = leseNachricht(client);
delartikel(id);
schreibeNachricht(client, "Sie haben den Artikel erfolgreich herausgenommen!");
//Angebot herausnehmen DB.sende (DELETE FROM >....); oder einfach DB.del(); ,wobei del implementiert werden muss.
break;
case 4: schreibeNachricht(client, "Welchen Nutzer wollen sie löschen? (Email angeben): ");
String emaill = leseNachricht(client);
delnutzer(emaill);
schreibeNachricht(client, "Sie haben den Nutzer erfolgreich suspendiert!");
//nutzer suspendieren vielleicht DB.sende(DELETE FROM ....); , wie bei case 3
break;
default: schreibeNachricht(client, "Invalides Zahl!");
break;
}
}
i = 2;
} else {
schreibeNachricht(client, "Login Failed.");
}
} else if(email.equals("neu")){
DB.sende(leseNachricht(client));
}
}
}
java.net.Socket warteAufAnmeldung(java.net.ServerSocket serverSocket) throws IOException {
java.net.Socket socket = serverSocket.accept(); // blockiert, bis sich ein Client angemeldet hat
return socket;
}
String leseNachricht(java.net.Socket socket) throws IOException {
BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
char[] buffer = new char[300];
int anzahlZeichen = bufferedReader.read(buffer, 0, 300); // blockiert bis Nachricht empfangen
String nachricht = new String(buffer, 0, anzahlZeichen);
return nachricht;
}
void schreibeNachricht(java.net.Socket socket, String nachricht) throws IOException {
PrintWriter printWriter =
new PrintWriter(
new OutputStreamWriter(
socket.getOutputStream()));
printWriter.print(nachricht);
printWriter.flush();
}
}
Und das hier ist mein Client:
Java:
// Client.java
// import java.net.Socket;
import java.io.*;
public class Client {
public static String neuerNutzer() throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in) );
System.out.println("Bitte geben Sie Ihren Nachnamen ein: ");
String nachname = in.readLine();
System.out.println("Bitte geben Sie Ihren Vornamen ein: ");
String vorname = in.readLine();
System.out.println("Bitte geben Sie Ihren EMail ein: ");
String email = in.readLine();
System.out.println("Bitte geben Sie Ihr Passwort ein: ");
String psw = in.readLine();
System.out.println("Bitte geben Sie Ihre Strasse ein: ");
String strasse = in.readLine();
System.out.println("Bitte geben Sie Ihren PLZ ein: ");
String plz = in.readLine();
System.out.println("Bitte geben Sie Ihren Ort ein: ");
String ort = in.readLine();
System.out.println("Bitte geben Sie Ihr Kontonummer ein: ");
String kontonr = in.readLine();
System.out.println("Bitte geben Sie Ihren BLZ ein: ");
String blz = in.readLine();
System.out.println("Bitte geben Sie Ihr Bank ein: ");
String bank = in.readLine();
String alles = "insert into Nutzer (name, vorname, email, passwort, strasse, plz, ort, kontonr, blz, bank) values ('" + nachname + "', '" + vorname + "', '" + email +"', '" + psw + "', '" + strasse + "', '" + plz + "', '" + ort + "', '" + kontonr + "', '" + blz + "', '" + bank + "')";
return alles;
}
public static String angeboterstellen() throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in) );
System.out.println("Bitte geben Sie eine kurze Becshreibung fur Ihren Artikel: ");
String kurzebeschr = in.readLine();
System.out.println("Bitte geben Sie eine genauere Becshreibung fur Ihren Artikel: ");
String langebeschr = in.readLine();
System.out.println("Bitte geben Sie das Gewicht in kg von Ihrem Artikel: ");
String gewicht = in.readLine();
System.out.println("Bitte geben Sie jetzt Anzahl den Artikeln: ");
String anzahl = in.readLine();
System.out.println("Bitte geben Sie MWSt von Ihren Artikel: ");
String mwst = in.readLine();
System.out.println("Bitte geben Sie Nettopreis von Ihren Artikel: ");
String netto = in.readLine();
float nettofloat = Integer.valueOf(netto).intValue();
float mwstfloat = Integer.valueOf(mwst).intValue();
float brutto = (nettofloat*(mwstfloat+100))/100;
System.out.println("Bitte geben Sie Ablaufdatum fur Ihren Artikel: ");
String ablaufdatum = in.readLine();
String alles = "'" + kurzebeschr + "', '" + langebeschr + "', " + gewicht + ", " + anzahl + ", " + mwst + ", " + brutto + ", " + netto + ", '" + ablaufdatum + "', ";
return alles;
//Artikel Schokolade = new Artikel ("Schokolade Milka", "feine Milchschokolade", "300gr", "2", "19", "2,89", "2,59", "05.05.2011", "Thoralf@live.de", "Thoralf@live.de", 1);
// Artikel Schokolade = new Artikel (alles, oder eigentlich AngebotErstellen bei Server, "email", "email", 1);
}
public static String personendatenAndern(String email) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in) );
System.out.println("Bitte geben Sie Ihren neuen Nachnamen ein: ");
String nachname = in.readLine();
System.out.println("Bitte geben Sie Ihren neuen Vornamen ein: ");
String vorname = in.readLine();
System.out.println("Bitte geben Sie Ihr neues Passwort ein: ");
String psw = in.readLine();
System.out.println("Bitte geben Sie Ihre neue Strasse ein: ");
String strasse = in.readLine();
System.out.println("Bitte geben Sie Ihren neuen PLZ ein: ");
String plz = in.readLine();
System.out.println("Bitte geben Sie Ihren neuen Ort ein: ");
String ort = in.readLine();
System.out.println("Bitte geben Sie Ihr neues Kontonummer ein: ");
String kontonr = in.readLine();
System.out.println("Bitte geben Sie Ihren neuen BLZ ein: ");
String blz = in.readLine();
System.out.println("Bitte geben Sie Ihr neues Bank ein: ");
String bank = in.readLine();
String personendaten = "UPDATE Nutzer SET name = '" + nachname + "', vorname ='" + vorname + "', email='" + email + "', passwort='" + psw + "', strasse='" + strasse + "', plz='" + plz + "', ort='" + ort + "', kontonr= '" + kontonr + "', blz='" +blz + "', bank='" + bank + "' WHERE email = '" + email + "';";
//Nutzer Thoralf = new Nutzer("Ehret", "Thoralf", "Thoralf@live.de", "parola", "Hauptstr", "33465", "Weimar", "12875936", "2736378", "Postbank");
return personendaten;
}
public static void main(String[] args) {
Client client = new Client();
try {
client.login();
} catch (IOException e) {
e.printStackTrace();
}
}
void login() throws IOException {
String ip = "127.0.0.1"; // localhost
int port = 11111;
java.net.Socket socket = new java.net.Socket(ip,port); // verbindet sich mit Server
BufferedReader in = new BufferedReader(new InputStreamReader(System.in) );
int i = 1;
while(i == 1){
String vomserver = leseNachricht(socket); // Bitte Loginanmen eingeben aus dem server ablesen
System.out.println(vomserver); // Bitte Loginnamen eingeben an der Konsole schreiben
String email = in.readLine();
schreibeNachricht(socket, email); //email an den Server senden
String a = "";
String passwort = "";
String s = "pwfalse";
if(!(email.equals("neu"))){
a = leseNachricht(socket); //Bitte passwort eingeben aus dem server ablesen
System.out.println(a); // Bitte passwort eingeben an der Konsole schreiben
passwort = in.readLine();
schreibeNachricht(socket, passwort); //passwort an dem server senden server 31
s = leseNachricht(socket); //abgleich ob Passwort und Email stimmen
}
if(!(email.equals("neu"))){
if(s.equals("pwcorrect")&&!(email.equals("al4enguz@gmail.com"))){
boolean schleife = true;
while(schleife){
a = leseNachricht(socket);
System.out.println(a); //Willkommen, was wollen sie tun?
String Eingabe = in.readLine(); //auswahl und senden der auswahl
schreibeNachricht(socket, Eingabe);
int x = Integer.valueOf(Eingabe).intValue();
switch (x){
case 1: String Angebot = angeboterstellen();
schreibeNachricht(socket, Angebot);
a = leseNachricht(socket);
System.out.println(a);
//angebot erstellen
break;
case 2: schleife = false;
a = leseNachricht(socket);
System.out.println(a);
socket.close();
//ausloggnachricht erhalten
break;
case 3: String personendaten = personendatenAndern(email); //TODO personendatenAndern implementieren.
schreibeNachricht(socket, personendaten);
a = leseNachricht(socket);
System.out.println(a);
//personendaten andern
break;
default: a = leseNachricht(socket);
System.out.println(a);
break;
}
}
i = 2; //while schleife beenden
} else if (email.equals("al4enguz@gmail.com") && s.equals("pwcorrect")){
boolean schleife = true;
while(schleife){
//schreibeNachricht(socket, "\nWas wollen sie tun? Bitte geben sie die entsprechende Zahl an: 1. Auflisten von nutzern, 2. abmelden, 3. Angebot herausnehmen oder 4. nutzer suspendieren");
a = leseNachricht(socket);
System.out.println(a);
String eingabea = in.readLine(); //auswahl und senden der auswahl
schreibeNachricht(socket, eingabea);
int x = Integer.valueOf(eingabea).intValue();
switch (x){
case 1: //Tabelle auflisten
break;
case 2: schleife = false;
a = leseNachricht(socket);
System.out.println(a);
socket.close();
//ausloggnachricht erhalten
break;
case 3: a=leseNachricht(socket);
System.out.println(a);
String id = in.readLine();
schreibeNachricht(socket, id);
a=leseNachricht(socket);
System.out.println(a);
break;
case 4: a=leseNachricht(socket);
System.out.println(a);
String emaill = in.readLine();
schreibeNachricht(socket, emaill);
a=leseNachricht(socket);
System.out.println(a);
//nutzer suspendieren vielleicht DB.sende(DELETE FROM ....); , wie bei case 3
break;
default: schreibeNachricht(socket, "Invalides Zahl!");
break;
}
}
i = 2;
}
} else {
schreibeNachricht(socket, neuerNutzer());
}
}
}
void schreibeNachricht(java.net.Socket socket, String nachricht) throws IOException {
PrintWriter printWriter =
new PrintWriter(
new OutputStreamWriter(
socket.getOutputStream()));
printWriter.print(nachricht);
printWriter.flush();
}
String leseNachricht(java.net.Socket socket) throws IOException {
BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
char[] buffer = new char[300];
int anzahlZeichen = bufferedReader.read(buffer, 0, 300); // blockiert bis Nachricht empfangen
String nachricht = new String(buffer, 0, anzahlZeichen);
return nachricht;
}
}
Da ich es morgen schon vorzeigen kann bitte ich um eine schnelle Antwort
Zuletzt bearbeitet: