Client Server Anwendung

soa

Erfahrenes Mitglied
Hallo zusammen,

ich habe mich mal gefragt, wie es aussehen müßte , wenn dass MVC Konzept
über eine Client Server Architektur Anwendung finden sollte.

Anbei habe ich dazu eine kleine Skizze angefertigt.

View - Model und Controller können dabei, je nach Anwendung aus mehreren
Klassen bestehen. Client und Server sind nur jeweils aus einer Klasse gestrickt.

Über Meinungen und Tipps wäre ich sehr verbunden .


Viele Grüße
SOA
 

Anhänge

  • MVC_CL_SERVER.jpg
    MVC_CL_SERVER.jpg
    24,1 KB · Aufrufe: 47
Ok. Manchmal muss man einsehen, dass eine Skizze schon ein wenig Aussagekraft
besitzen muss, um ein Anliegen vorzutragen :-)

Folgendes: Ich habe eine kleine Beispiel GUI mit einer Textarea .
Der eingegebene Text soll an den Client übermittelt werden.

Dieser sendet dann einen Stream an den Server. Mehr soll erst einmal gar nicht
passieren.

Punkt 1: ich habe eine Klasse Daten erstellt, die die Kommunikation zwischen
GUI und Client regelt.

Vorweg: Leider sind die Konvertierungen vom Editor verloren gegangen . Sorry.

Java:
public class Daten {

String daten;

public void setDaten(String daten)

{

this.daten = daten;

}

public String getDaten()

{

return daten;

}

}

Meine Gui poste ich auch einmal mit :
Die Gui ruft bei der Erzeugung den Client auf.

Java:
import java.awt.GridLayout;

import javax.swing.*;
import javax.swing.border.CompoundBorder;
import javax.swing.border.TitledBorder;
import java.awt.event.*;
import java.awt.*;



public class View extends JFrame implements ActionListener{

JLabel Text11;
JLabel Ausgabe;
JButton b1;
JTextArea area;
String daten;
Daten d;
Client c;


public View(){
super("Server Nachrichten");
setSize(400, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);

d = new Daten();
c = new client1();

GridLayout layout = new GridLayout(3, 1);
setLayout(layout);


Text11 = new JLabel("Daten für den Server");
add(Text11);
area = new JTextArea(10,20);
Ausgabe = new JLabel("");
add(Ausgabe);

JPanel textAreaWithBorder = new JPanel();
textAreaWithBorder.setBorder(new CompoundBorder(new
TitledBorder(null,
"Weitere Angaben: ", TitledBorder.LEFT, TitledBorder.TOP),
null));
textAreaWithBorder.add(area);
b1 = new JButton ("Sende Daten");
b1.addActionListener(this);

add(textAreaWithBorder);
textAreaWithBorder.add(b1);


}//Konstruktor


public void actionPerformed(final ActionEvent e) {

final Object source = e.getSource();

if (source == b1) {


daten = area.getText();
String meldung = "Ich sende jetzt die Daten";
Text11.setText(meldung);
Ausgabe.setText(daten);
d.setDaten(daten);



new Thread(){
public void run(){

c.sendData(d.getDaten());

}
}.start();

}//if

} //action performed




public static void main (String args[]){

View v = new View();
v.setVisible(true);

}

}

Die Kommunikation zwische Client und Server hat schon funktioniert.
Allerdings war das, bevor ich einzelne Funktionen erstellt habe.

Hier der Client:

Hier hapert es auch !!

Java:
import java.io.*;
import java.net.*;

public class client1 {

Daten d;
Socket s;

public client1()
{

try
{
s = new Socket("localhost", 4711);
System.out.println("Socket erzeugt! "
+ "IP-Adresse: " + s.getInetAddress()
+ " Port: " + s.getPort()
+ " Puffergroesse: " + s.getReceiveBufferSize());

} catch (IOException e) {
System.out.println("Socket-Fehler:" + e);
} catch (Exception e) {
System.out.println("Exception Fehler:" + e);
}
}

/**
public static void main(String[] args )
{
new client();
}
*/


public void sendData(String daten)
{

//daten = d.getDaten();
//System.out.print("Hallo"+daten);
PrintWriter out;
try {
out = new PrintWriter(s.getOutputStream(), true);
out.println(d.getDaten());
out.println();
} catch (IOException e) {
System.out.println("Socket-Fehler:" + e);
e.printStackTrace();
}

}

public void receiveData()
{
try {

BufferedReader in = new BufferedReader
(new InputStreamReader(s.getInputStream()));

String line;
System.out.println();
System.out.println("Vom Server empfangenes Dokument:");
while ((line = in.readLine()) != null)
{
System.out.println(line);

}
System.out.println();
System.out.println("Das war's.");

} catch (IOException e) {
System.out.println("Socket-Fehler:" + e);
} catch (Exception e) {
System.out.println("Anderer Fehler:" + e);
}

}


}//end of class

Leider werden keine Daten an den Server übermittelt.



Hier noch einmal mein kleiner Testserver.

Java:
import java.io.*;
import java.net.*;

public class Server {




public static void main(String[] args )
{
int i = 1;

try
{ ServerSocket s = new ServerSocket(4711);
System.out.print("Server gestartet");

for (;;)
{
Socket incoming = s.accept( );
System.out.println("Starte Thread " + i);
new ThreadedEchoHandler(incoming, i).start();
i++; //Threads werden hochgezählt
}
}
catch(IOException e){
System.out.println("Listen socket:"+e.getMessage());}
}



}


class ThreadedEchoHandler extends Thread

{ //Konstruktor erwartet Socket und Zahl für den Echo-Counter als Parameter
public ThreadedEchoHandler(Socket i, int c)
{
incoming = i;
counter = c;
}

public void run()
{

BufferedReader in = null;
PrintWriter out = null;

try
{
in = new BufferedReader
(new InputStreamReader(incoming.getInputStream()));

out = new PrintWriter
(incoming.getOutputStream(), true);


boolean done = false;

while (!done)
{
String str = in.readLine();
if (str == null)
done = true;
else
{
out.println("Sie haben folgende Nachricht an mich gesendet:\n"
+
"Echo (" + counter + "):\n" + str + "\nDanke und
tschuess!");
out.println("\u0000");
}
}

}
catch (Exception e)
{ System.out.println("Fehlerc: " + e);
}
finally{ //finally-Klausel zum Schließen der geöffneten Streams
try{

if (in != null) in.close();
if (out != null) out.close();
if (incoming != null) incoming.close();
}
catch (IOException e){
System.out.println("Fehlera: " + e);
}

}//end finally
System.out.println("Thread " + counter + " beendet.");
}

private Socket incoming;
private int counter;
}

Wo liegen die Fehler und vor Allem wie kann ich es besser machen


Danke
SOA
 
Zurück