ESA 2 WS 2018/2019

Ich bin nich so richtig sattelfest in Java... mag jemand über meine Codevorschläge schauen?

Server:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;



public class Server {

static private String leseNachricht(Socket s) throws Exception {
BufferedReader br =
new BufferedReader(
new InputStreamReader(
s.getInputStream()));
char[] buffer = new char[200];
int anzahlZeichen = br.read(buffer, 0, 200);
String nachricht = new String(buffer, 0, anzahlZeichen);
return nachricht;
}

static public String erstelleSocketUndLeseNachricht() throws Exception{
//Erstellen Sie einen ServerSocket der auf eine Verbindung wartet und eingehende Nachrichten liest.

int port = 11111;
java.net.ServerSocket serverSocket = new java.net.ServerSocket(port);
java.net.Socket client = warteAufAnmeldung(serverSocket);
String nachricht = leseNachricht(client);
System.out.println(nachricht);
schreibeNachricht(client, nachricht);

}

java.net.Socket warteAufAnmeldung(java.net.ServerSocket serverSocket) throws IOException {
java.net.Socket socket = serverSocket.accept(); // blockiert, bis sich ein Client angemeldet hat
final java.net.Socket socket = socket;
return socket;
}

static public BestellPosition unmarschalNachricht( String msg ) {
//Implementieren Sie eine geeignete Deserialisierung der Nachricht hier, um die empfangenen Daten in ein Objekt
//der Klasse BestellPosition zu transformieren.

String msg = new String;

msg = bp;

System.out.print(msg); //Bildschirmausgabe
}

public static void bearbeiteBestellung( BestellPosition bp) {
System.out.println("Bestellung erhalten\n#######");
System.out.println( bp );
}

public static void empfangeBestellung() throws Exception {
String msg = erstelleSocketUndLeseNachricht();
BestellPosition bp = unmarschalNachricht(msg);
bearbeiteBestellung(bp);
}


public static void main(String[] args) throws Exception {
System.out.println("Server gestartet");

while( true ) {
empfangeBestellung();
}


}

}


Client:
import java.i:confused:utputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;


public class Client {




public static void schreibeNachricht( Socket s, String msg) throws Exception {
PrintWriter printWriter =
new PrintWriter(
new OutputStreamWriter(
s.getOutputStream()));
printWriter.print(msg);
printWriter.flush();
}

public static void verbindeUndSchreibeNachricht(String msg) throws Exception {
//Implementieren Sie den Verbindungsaufbau hier. Senden Sie die Informationen mit Hilfe der Methode "schreibeNachricht"

String ip = "192.168.178.26"; // localhost
int port = 11111;
java.net.Socket socket = new java.net.Socket(ip, port); // mit Server verbinden

schreibeNachricht(socket, bp);

}

public static String marshall( BestellPosition bp) {
//Implementieren Sie eine geeignete Serialisierung (Marshalling) der Objekte der Klasse BestellPosition

String [] werte = new String [3]; // Materialdaten in ein String-Array schreiben
werte[0] = bp.material;
werte[1] = bp.preis;
werte[2] = bp.anzahl;

bp = werte[0] + " " + werte[1] + " " + werte[2];

}

public static void sendeBestellung(BestellPosition bp) throws Exception {
String msg = marshall(bp);
verbindeUndSchreibeNachricht(msg);
}

public static void main(String[] args) throws Exception{
System.out.println("Client");

BestellPosition bp = new BestellPosition();

bp.material = "Stuhl";
bp.preis = "302.91";
bp.anzahl = 5;

sendeBestellung(bp);

}
}


Beim Marshalling / UnMarshalling dachte ich mir, ich speichere die Werte in ein String-Array und übergebe sie dann.
 
Hallo Wolfgang, ich bin zwar auch nicht mehr so super fit in Java, aber irgendwie kriegen wir die Aufgabe schon hin :D
Werde mich voraussichtlich am Donnerstag an die Aufgabe setzen
 
Hi, ich denke ich habe es jetzt so, wie es laufen soll. Das Marshalling ist meines Erachtens quasi schon integriert. Man kann ja einfach die toString Methode aus der BestellPosition Klasse benutzen und den zusammengesetzten Text dann nachher serverseitig wieder "aufbröseln".

Dazu meine Server Funktionen:
static public String erstelleSocketUndLeseNachricht() throws Exception{
int port = 11111;
java.net.ServerSocket serverSocket = new java.net.ServerSocket(port);
java.net.Socket client = serverSocket.accept();
serverSocket.close();
String nachricht = leseNachricht(client);
return nachricht;
}
static public BestellPosition unmarschalNachricht( String msg ) {
String mat = msg.substring(msg.indexOf("Material: ")+10, msg.indexOf("Preis: ")-1);
String pre = msg.substring(msg.indexOf("Preis: ")+7, msg.indexOf("Anzahl: ")-1);
int anz = Integer.parseInt(msg.substring(msg.lastIndexOf(": ")+2));
BestellPosition bp = new BestellPosition();
bp.material = mat;
bp.preis = pre;
bp.anzahl = anz;
return bp;
}


Und die Client Funktionen:
public static void verbindeUndSchreibeNachricht(String msg) throws Exception {
String ip = "localhost";
int port = 11111;
java.net.Socket socket = new java.net.Socket(ip,port);
schreibeNachricht(socket, msg);
}
public static String marshall( BestellPosition bp) {
return bp.toString();
}
 
Top