# Mini Client-Server-Anwendung funktioniert nicht



## Cihan38 (5. Jun 2016)

Hallo Zusammen,
derzeit lerne ich mit Client-Server-Anwendungen umzugehen, da ich so etwas vorher noch nicht gemacht habe.

Zur Übung habe ich eine mini Anwendung programmiert. Allerdings funktioniert es zur Zeit nicht so ganz. Ich vermute, dass das Problem bei meinem Server liegt.

Bei meinem Programm schickt der Client eine *Nachricht *aus einem Textfeld(gui) an den Server. Der Server soll die Nachricht an ein anderen Textfeld senden. Es soll quasi ein Gruppenchat sein. 

Die Client Seite funktioniert, aber mein Server macht nicht das, was er soll. Ich hoffe jemand kann mir helfen.

Vielen Dank im Voraus


*Client*
import [...]

public class SCSClient extends JFrame implements ActionListener {

    //Server Attribute
    InputStream is=null;
    OutputStream os=null;
    PrintWriter out;
    Scanner in;

    //Gui attribute
    JButton buttonOK;
    feld panel= new feld();


    public SCSClient(String host,int port) throws UnknownHostException, IOException{
        //GUI-Abschnitt
        this.setTitle("Client");
        this.setSize(500, 500);
        this.setVisible(true);
        BorderLayout bla= new BorderLayout();
        this.setLayout(bla);
       buttonOK = new JButton("OK");
       buttonOK.addActionListener(this);
       panel.add(buttonOK);
       this.add(panel);
        this.setVisible(true);


           //Serververbindung
        Socket server = new Socket(host,port);
        this.is=server.getInputStream();
        this.os=server.getOutputStream();

         out = new PrintWriter(os,true);
         in  = new Scanner(is );


    }


@Override
    public void actionPerformed(ActionEvent es) {

        if(es.getSource()==buttonOK){
            System.out.println(panel.tfName.getText());   //Diese Zeile wurde zum testen erstellt
            out.println("hallo");        //wir schicken unsere Nachricht an den Server

        }
    }
    public static void main(String[] args) throws UnknownHostException, IOException {
            SCSClient kunde = new SCSClient("localhost",6000);

    }
}


*Server*
import[...]
public class SCSServer {

    //Server-Attribute
    Socket client=null;
    InputStream is;
    OutputStream os;
    PrintWriter out;
    Scanner in;

    //Gui panel
    feld panel=new feld();

    public SCSServer(int port){

        try {
            ServerSocket server=new ServerSocket(port);

            while(true){
                client=server.accept();
                this.handle(client);
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void handle(Socket client) {
        try {

            //Streams initialisieren
            this.is=client.getInputStream();
            this.os=client.getOutputStream();
             out = new PrintWriter(os,true);
             in  = new Scanner(is );             

             //Das was der client in das gelbe Textfeld geschrieben hat, soll drunter geschrieben werden.

            String antwort = in.nextLine();  //Eingabe wird zwischengespeichert

             panel.antwort.setText(antwort);


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static void main(String[] args){
    new SCSServer(6000);
    }

}



*feld*
public class feld extends JPanel  {
    JTextField tfName;
    JTextField antwort;

    public feld(){
        this.setPreferredSize(new Dimension(500,300));
        this.setBackground(Color.GRAY);

        JLabel label = new JLabel("Ihre Nachricht");
        this.add(label);

        tfName= new JTextField(20);         //Nachricht des einzelnen Clients
        antwort= new JTextField(30);        // Nachrichten aller Clients die der Server schickt

        tfName.setBackground(Color.YELLOW);
        this.add(tfName);
        this.add(antwort);
    }

}


----------



## dayaftereh (5. Jun 2016)

Hey, kannst du deinen Code bitte in den Code Formatierungsblock setzten ....

EDIT

Dein Server wartet auf einen Newline mit in.readLine(). Aber dein Client schickt einen String ohne Newline am Ende.


```
out.println("hallo\n");
```


----------



## Cihan38 (5. Jun 2016)

Ja natürlich. Sorry bin neu hier 
Vielen Dank


*Client*

```
public class SCSClient extends JFrame implements ActionListener {

    //Server Attribute
    InputStream is=null;
    OutputStream os=null;
    PrintWriter out;
    Scanner in;
  
    //Gui attribute
    JButton buttonOK;
    feld panel= new feld();

   
    public SCSClient(String host,int port) throws UnknownHostException, IOException{
        //GUI-Abschnitt
        this.setTitle("Client");
        this.setSize(500, 500);
        this.setVisible(true);
        BorderLayout bla= new BorderLayout();
        this.setLayout(bla);
        buttonOK = new JButton("OK");
        buttonOK.addActionListener(this);
        panel.add(buttonOK);
        this.add(panel);
        this.setVisible(true);

          
            //Serververbindung
        Socket server = new Socket(host,port);
        this.is=server.getInputStream();
        this.os=server.getOutputStream();
      
          out = new PrintWriter(os,true);
          in  = new Scanner(is );

      
    }


    @Override
    public void actionPerformed(ActionEvent es) {

        if(es.getSource()==buttonOK){
            System.out.println(panel.tfName.getText());   //Diese Zeile wurde zum testen erstellt
            out.println("hallo");        //wir schicken unsere Nachricht an den Server
                      
        }
    }

  
  
    public static void main(String[] args) throws UnknownHostException, IOException {
            SCSClient kunde = new SCSClient("localhost",6004);
  
    }
  
  
  
  
}
```


*Server*

```
public class SCSServer {

    //Server-Attribute
    Socket client=null;
    InputStream is;
    OutputStream os;
    PrintWriter out;
     Scanner in;
   
     //Gui panel
     feld panel=new feld();
  
   
    public SCSServer(int port){
      
        try {
            ServerSocket server=new ServerSocket(port);
          
            while(true){
                client=server.accept();
                this.handle(client);
            }
          
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

  

    private void handle(Socket client) {
        try {
          
            //Streams initialisieren
            this.is=client.getInputStream();
            this.os=client.getOutputStream();
              out = new PrintWriter(os,true);
              in  = new Scanner(is );            
            
              //Das was der client in das gelbe Textfeld geschrieben hat,soll in das Feld dadrunter geschrieben werden
              String antwort = in.nextLine();  //Eingabe wird zwischengespeichert
          
              panel.antwort.setText(antwort);
          
          
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
      
    }
  
    public static void main(String[] args){
     new SCSServer(6004);
    }

}
```


*feld*


```
public class feld extends JPanel  {
     JTextField tfName;
     JTextField antwort;

    public feld(){
         this.setPreferredSize(new Dimension(500,300));
         this.setBackground(Color.GRAY);
       
         JLabel label = new JLabel("Ihre Nachricht");
         this.add(label);
       
         tfName= new JTextField(20);         //Nachricht des einzelnen Clients
         antwort= new JTextField(30);        // Nachrichten aller Clients die der Server schickt

         tfName.setBackground(Color.YELLOW);
         this.add(tfName);
         this.add(antwort);
    }
  
}
```


----------



## dayaftereh (5. Jun 2016)

Du hast mein EDIT  gesehen ? 

Mach im Client folgendes 

```
out.println("Hello\n");
out.flush();
```


----------



## Cihan38 (5. Jun 2016)

Hallo,

eigentlich sollte da nicht "hallo" sondern folgendes stehen


```
out.println(panel.tfName.getText()+"\n");
out.flush();
```


Irgendwie funktioniert es trotzdem nicht, wenn ich es ausführe. Es wird nichts im unteren Textfeld übernommen.


----------



## Cihan38 (5. Jun 2016)

und in meinem Server benutze ich in.nextLine() und nicht in.readLine() wie du es gesagt hast.


----------



## Cihan38 (7. Jun 2016)

dayaftereh hat gesagt.:


> Du hast mein EDIT  gesehen ?
> 
> Mach im Client folgendes
> 
> ...



Hat denn niemand eine Antwort ? Ich wäre echt dankbar


----------



## funlow (8. Jun 2016)

Mal kurz ne Frage: Du benutzt ja den ganz normalen OutputStream geht das überhaupt ?
Hab damit gestern auch ein bisschen rumprobiert und bei mir sagt der immer das sei nicht möglich weil OutputStream ne abstrakte Klasse ist.

Ansonsten du sagst deine Clientseite funktioniert... kommt denn vom Client was beim Server an oder nicht ?
Ich hab nämlich gestern mit der .write() Methode gearbeitet damit der InputStream was empfängt funktioniert das überhaupt mit der println() Methode ( Kenn mich da selber nicht sonderlich gut aus muss ic dazu sagen )


----------



## dayaftereh (8. Jun 2016)

Du kannst vielleicht den Data-Output/-InputStream nutzen.


----------

