41
Der Chat Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music Java News & Music

Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

Embed Size (px)

Citation preview

Page 1: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

Der ChatDer Chat

stephan volgmann | rafael nenna | andre berning

Java News & MusicJava News & Music

Page 2: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

InhaltInhalt

• Ziele und Anforderungen

• Aufgabenstellung

• Das Chatplugin

• Der Server - Klasse

• Die Ein- Ausgabeströme der Nachrichten

• Simulation des Chats

• Installation

Page 3: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Ziele & AnforderungenZiele & Anforderungen

Der Chat als kommunikatives Forum & Treffpunkt

Austausch von Nachrichten & Informationen

Attraktivitätssteigerung von Java News & Music

Page 4: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

AufgabenstellungAufgabenstellung

Das Chatplugin als Applet Rafael Nenna

Aufgabenverteilung:

Ein Java Chat im Rahmen der Projektarbeit Java News & Music

Der Server Andre Berning

Die Ein-/Ausgabeströme Stephan Volgmann

Page 5: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die Klasse mainmanager Die Klasse mainmanager –– Der ServerDer Server

Aufgaben des Servers

Funktionsweise der Klasse mainmanager

Warum ein eigener Server ?

Page 6: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die Klasse mainmanagerDie Klasse mainmanager -- Warum ?Warum ?

Applets können untereinander aufgrund derJava Sicherheitsbeschränkungen schlecht kommunizieren !

Page 7: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die Klasse mainmanagerDie Klasse mainmanager - - AufgabenAufgaben

Aufbau der Sockets und Verwaltung der einzelnen Chatteilnehmer

Senden der Nachrichten an alle User

Zuweisung des Usernamens anhand der IP-Adresse

Page 8: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die Klasse mainmanager Die Klasse mainmanager -- Sockets & UserSockets & User

Aufbau eines ServerSockets am Port 5666:try {

wait = new ServerSocket(PORT);}

catch (IOException e) {...}

Anschließend dauerhafte Überwachung des Ports durch einenThread

In der run-Methode des Threads wird Client Verbindung akzeptiert und in einem gemeinsamen Vector „gespeichert“:public void run(){

try { while(true)

{ Socket client=wait.accept();

usermanager newbie = new usermanager(this, client); users.addElement(newbie); }

} catch (IOException e) { ... }

Page 9: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

public void run(){

try {

while(true) {

Socket client=wait.accept();

usermanager newbie = new usermanager(this, client);

users.addElement(newbie);

}

} catch (IOException e) { ... }

-dem Objekt newbie werden zwei Parameter übergeben:1. this (also das Objekt „newbie“)2. Client-(also ein Socket)

-die Weiterverarbeitung erfolgt in der Klasse userrmanager

Die Klasse mainmanager Die Klasse mainmanager -- Sockets & UserSockets & User

-Was passiert bei einer Verbindungsaufnahme?

Page 10: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die Klasse mainmanager Die Klasse mainmanager –– DasDas SendenSenden

Wie sendet mainmanager die Nachricht an alle Chatter?

public void allmembers(String msg ){int i;usermanager single;for (i=0; i<users.size(); i++){... somit erreicht man alle Clients.

Die Nachricht besteht aus mehreren Teilen:...single.output.println(this.username+" ["+Zeit+"]"+ message );...

-message wird direkt vom usermanager an mainmanager übergeben

-Zeit wird von der Klasse time erzeugt

-Username wird von der Methode filesearch erzeugt

Page 11: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die Klasse mainmanager Die Klasse mainmanager - - Die UsernamenDie Usernamen

Nickname oder Username?

Wie Username ?adress = file.substring( file.indexOf(""), file.indexOf("_") );username = file.substring( file.indexOf("_")+1, file.lastIndexOf("_") );

if (adress.equals(ipadress)){

this.username = username; .....

Anschliessend kann der Username dann mit der Nachricht zusammen gesendet werden.

Page 12: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die Klasse mainmanager Die Klasse mainmanager -- Die Zeitausgabe Die Zeitausgabe

In unserem Chat werden zwei Zeitausgaben generiert

Page 13: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das Chatplugin Das Chatplugin -- RealisierungRealisierung

Aufgaben

Realisierung

Anforderung

Page 14: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das Chatplugin Das Chatplugin -- LayoutLayout

Probleme

GridBagLayout

Anforderungen

Page 15: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

0 / 0 1 / 0

0 / 1 1 / 1

Das ChatpluginDas Chatplugin – – Screenshots LayoutScreenshots Layout

022  public void init() 023       024  {025      026  GridBagLayout gbl = new GridBagLayout();027  this.setLayout(gbl);028  this.setBackground(Color.lightGray);029 030  GridBagConstraints c = new GridBagConstraints();031  c.fill = GridBagConstraints.BOTH;032  c.insets = new Insets(4,4,4,4); 033   034  outputarea = new TextArea  035  ("",23,1,outputarea.SCROLLBARS_VERTICAL_ONLY );              036   chatInput = new TextField("Ihre Nachricht",40);

Page 16: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

0 / 0 1 / 0

0 / 1 1 / 1

Das ChatpluginDas Chatplugin – – Screenshots LayoutScreenshots Layout

040                 //TextArea outputarea041                 c.gridx = 0;042                 c.gridy = 0;043                 c.gridwidth = 2;044                 gbl.setConstraints(outputarea, c);045                 add(outputarea);046                 outputarea.setEditable(false);

Page 17: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Socketverbindung

Problem

= IP des Hosts + Portnummer

Das ChatpluginDas Chatplugin-- Die KommunikationDie Kommunikation

Page 18: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

067   public void start()068   {069     try070     {071        URL  myURL = this.getCodeBase();

072        String  myHostIP = myURL.getHost();

073        mysocket    = new Socket(myHostIP, PORT);

Das ChatpluginDas Chatplugin –– Ermittlung der IPErmittlung der IP

Page 19: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - AblaufAblauf

Einstieg in den Chat

init()

start()

Page 20: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin – – ThreadThread

067   public void start()068   { ...

089     if (mythread == null)090     {091       mythread = new Thread(this);092       mythread.setPriority(Thread.MIN_PRIORITY);093       mythread.start();094     }095   }

Page 21: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - TexteingabeTexteingabe

Benutzer „Rudi“ gibt Nachricht ein: „Hello World“

Drücken der send-Schaltfläche oder der Enter-Taste

Page 22: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin – – EventhandlingEventhandling

166   public void actionPerformed(ActionEvent e)167   {168     String theText = chatInput.getText();169     outline.println(theText);170     chatInput.setText("");  171   }  172   173   public void keyPressed  (KeyEvent e) 174   {175     if (e.getKeyCode()==KeyEvent.VK_ENTER)176                  {177                    String theText = chatInput.getText();178                 outline.println(theText);179                 chatInput.setText("");180                  }181 182     }

PrintStream outline;

Page 23: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin – – PrintStreamPrintStream

PrintStream outline;

chatplugin.class

manmanager.class

usermanager.class

time.class

„Hello World“

Page 24: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - LauschenLauschen

chatplugin.class

Socketverbindung auf Port 5666

Page 25: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - LesenLesen

chatplugin.class

BufferedReader inputline;

144         while(true)145         {146           line = inputline.readLine();147           if(line!=null)148           outputarea.append(line+'\n' );149         }

Page 26: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - ThreadThread

098   public void stop()099   {100     try101     {102       mysocket.close();103     }104      …. …….

109 110     if ((mythread !=null) && mythread.isAlive())111     {112       mythread.interrupt();113       mythread = null;114     }115   }

136   public void run()137   {138   while(mythread.isInterrupted() == false)139   ….

Page 27: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - AblaufAblauf

D ie H TM L-D ate i in der das Applet im plem entiert ist, w ird aufgerufen.

Page 28: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - AblaufAblauf

in it()

- Layoutm anager w ird festgelegt- grafische Kom ponenten ausgerichtet und angezeigt.

Page 29: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - AblaufAblauf

- In form ation über gelungene Verbindung anzeigen- N euen Thread m it n iedriger P rioritä t starten

start()

- aus der U R L w ird d ie IP - Adresse des H osts erm itte lt- e ine Socketverb indung w ird zum H ost hergeste llt- E rzeugung e ines BufferedR eader-O bjektes um D atenstom auslesen zu können - P rin tStream -O bjekt um D aten an den Stream senden zu können w ird erzeugt

try

catch

- Ausgabe von Fehlerm eldungen- System austieg

Page 30: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Das ChatpluginDas Chatplugin - - AblaufAblauf

run()

solange der Thread n icht unterbrochen ist

try catch

ständig den InputStream auf neue D aten überwachen

neue Daten vorhanden ?

ja

nein

Daten ausgeben

- Fehlerm eldung ausgeben

Page 31: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager

Zuständig für Verbindungen zwischen den User

Baut einen DataInputStream u. PrintStream auf

Schickt die Nachrichten an den Mainmanager zur Methode „allmembers“ zurück

Ermittelt die IP- Adresse der User und übergibt sie der Methode „filesearch“ in der Klasse mainmanager

Die Funktionen im Überblick:

Übernimmt die vom Server übergebenen Verbindungen

Page 32: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager

Anfrage

Übergabe der Verbindungen

Aufbau der Ein / Ausgabe- Ströme

Page 33: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager

UML - Diagramm

Page 34: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager

Übergabe der Verbindungen vom Server

Importieren der verwendeten Pakete

DataInputStream PrintStream

Socket- Verbindung

Page 35: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager

Ermitteln der IP

Aufbau der Ein- und Ausgabeströme

Page 36: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager

Rückgabe der IP- Adresse

Rückgabe der Chat- Nachrichten an die Methode allmembers

Page 37: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die Klasse Time Die Klasse Time

Generierung der aktuellen Serverzeit

Rückgabe der Uhrzeit an die Klasse mainmanager

Page 38: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die SimulationDie Simulation – Eine Nachricht im Chat – Eine Nachricht im Chat

mainmanager.class starten auf Verbindung warten

usermanager erhältSocketverbindung

Lauschen aufNachricht von Chatter

Lesen der NachrichtErmitteln der IP

Zuweisung des Benutzer-namens

Benutzername + Zeit + Nachricht

Weitergabe an Chatter

Page 39: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Die SimulationDie Simulation – Eine Nachricht im Chat – Eine Nachricht im Chat

Page 40: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

How To UseHow To Use – Die Installation – Die Installation

Grundlagen

Die Klasse mainmanager muss im gleichen Verzeichnis liegen wie chatplugin und usermanager

Über eine Konsole kann man den Server mit: java mainmanager starten

Ist der Server gestartet, wird die schon erwähnte Startzeitausgegeben

Page 41: Der Chat stephan volgmann | rafael nenna | andre berning Java News & Music

| Java News & Music |

Der ChatDer Chat – Projektarbeit 2003 – Projektarbeit 2003

stephan volgmann | rafael nenna | andre berning