# NetzwerkChat



## florian1995 (15. Jul 2010)

hier gleich mal der source(alles in einem JFRAME):
Server:

```
private void startServerButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                  
        Chat chat=new Chat();
        chat.start();
        if(startServerButton.getText().equals("Start Server!")){
            startServerButton.setText("Running..");
        }else{
            System.exit(0);
        }

    } 

----------------------------------------------------------------------------------------------

class Chat extends Thread{

    boolean run=true;

    public void run(){
        try{
            ServerSocket server=new ServerSocket(1234);
            Socket client=server.accept();
            InputStream input=client.getInputStream();
            OutputStream output=client.getOutputStream();
            while(run){
                output.write(input.read());
                output.flush();
            }
            input.close();
            output.close();
        }catch (Exception e){
            System.out.print(e);
        }
    }
}
```
und hier der client:

```
private void textFieldKeyPressed(java.awt.event.KeyEvent evt) {                                     
        if(evt.getKeyCode()==KeyEvent.VK_ENTER){
            try{
                Socket server=new Socket("localhost",1234);
                OutputStream output=server.getOutputStream();
                String s=textField.getText();
                for(int i=0;i<s.length();i++){
                    output.write(s.charAt(i));
                }
                output.flush();
                server.close();
                output.close();
            }catch(Exception e){
                System.out.print(e);
            }

        }
    }    

---------------------------------------------------------------

public class ChatInput extends Thread{

    boolean run=true;

    private String actText="";

    @Override
    public void run(){
        try{
            Socket server=new Socket("localhost",1234);
            InputStream input=server.getInputStream();
            while(run){
                actText+=(char)input.read();
                System.out.println(actText);
            }
            input.close();
        }catch(Exception e){
            System.out.print(e);
        }


    }

    public String getActText(){
        return actText;
    }
}
```

leider funktioniert das ganze nicht. es wird an der stelle in ChatInput kein Zeichen oder ähnliches ausgegeben. hoff jmd kann mir helfen.


----------



## SlaterB (15. Jul 2010)

der Server schreibt die eingelesenen Daten ausschließlich an denselben Socket zurück,

auf Client-Seite hast du aber verschiede, einer der schreibt und sich um die Rückgabe nicht schert
und einer der nichts schreibt, aber auch eine Rückgabe wartet, nur wird die nie kommen,

so wie der Server gebaut ist, ist überhaupt fraglich, ob der mehr als einen der beiden Client-Sockets bearbeiten kann,

auf Client-Seite solltest du dich auf einen Socket beschränken, und zwar dem im Thread,
aus textFieldKeyPressed müsstest du InputStream des Thread-Sockets erwischen und da was reinschreiben


----------



## florian1995 (15. Jul 2010)

danke für die tipps  habe den client jetzt dementsprechend umgebaut. bekomme nun leider eine fehlermeldung das der socket geschlossen sei.

```
private void textFieldKeyPressed(java.awt.event.KeyEvent evt) {                                     
        if(evt.getKeyCode()==KeyEvent.VK_ENTER){
            try{
                OutputStream output=chat.server.getOutputStream();
                String s=textField.getText();
                for(int i=0;i<s.length();i++){
                    output.write(s.charAt(i));
                }
                output.flush();
                output.close();
            }catch(Exception e){
                System.out.print(e);
            }

        }
    }        

------------------------------------------------------------

public class ChatInput extends Thread{

    boolean run=true;

    Socket server;

    private String actText="";

    @Override
    public void run(){
        try{
            server=new Socket("localhost",1234);
            InputStream input=server.getInputStream();
            while(run){
                actText+=(char)input.read();
                System.out.println(actText);
            }
            input.close();
        }catch(Exception e){
            System.out.print(e);
        }


    }

    public String getActText(){
        return actText;
    }
}
```


----------



## SlaterB (15. Jul 2010)

schreibe
Thread.sleep(2000);
            output.close();
statt
output.close();

in textFieldKeyPressed(), dann kannst du die Zeichen auch noch empfangen bevor du selber alles aktiv zertrümmerst


----------

