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