der chat stephan volgmann | rafael nenna | andre berning java news & music
TRANSCRIPT
Der ChatDer Chat
stephan volgmann | rafael nenna | andre berning
Java News & MusicJava 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
| Java News & Music |
Ziele & AnforderungenZiele & Anforderungen
Der Chat als kommunikatives Forum & Treffpunkt
Austausch von Nachrichten & Informationen
Attraktivitätssteigerung von 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
| Java News & Music |
Die Klasse mainmanager Die Klasse mainmanager –– Der ServerDer Server
Aufgaben des Servers
Funktionsweise der Klasse mainmanager
Warum ein eigener Server ?
| Java News & Music |
Die Klasse mainmanagerDie Klasse mainmanager -- Warum ?Warum ?
Applets können untereinander aufgrund derJava Sicherheitsbeschränkungen schlecht kommunizieren !
| 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
| 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) { ... }
| 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?
| 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
| 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.
| Java News & Music |
Die Klasse mainmanager Die Klasse mainmanager -- Die Zeitausgabe Die Zeitausgabe
In unserem Chat werden zwei Zeitausgaben generiert
| Java News & Music |
Das Chatplugin Das Chatplugin -- RealisierungRealisierung
Aufgaben
Realisierung
Anforderung
| Java News & Music |
Das Chatplugin Das Chatplugin -- LayoutLayout
Probleme
GridBagLayout
Anforderungen
| 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);
| 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);
| Java News & Music |
Socketverbindung
Problem
= IP des Hosts + Portnummer
Das ChatpluginDas Chatplugin-- Die KommunikationDie Kommunikation
| 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
| Java News & Music |
Das ChatpluginDas Chatplugin - - AblaufAblauf
Einstieg in den Chat
init()
start()
| 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 }
| Java News & Music |
Das ChatpluginDas Chatplugin - - TexteingabeTexteingabe
Benutzer „Rudi“ gibt Nachricht ein: „Hello World“
Drücken der send-Schaltfläche oder der Enter-Taste
| 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;
| Java News & Music |
Das ChatpluginDas Chatplugin – – PrintStreamPrintStream
PrintStream outline;
chatplugin.class
manmanager.class
usermanager.class
time.class
„Hello World“
| Java News & Music |
Das ChatpluginDas Chatplugin - - LauschenLauschen
chatplugin.class
Socketverbindung auf Port 5666
| 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 }
| 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 ….
| 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.
| Java News & Music |
Das ChatpluginDas Chatplugin - - AblaufAblauf
in it()
- Layoutm anager w ird festgelegt- grafische Kom ponenten ausgerichtet und angezeigt.
| 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
| 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
| 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
| Java News & Music |
Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager
Anfrage
Übergabe der Verbindungen
Aufbau der Ein / Ausgabe- Ströme
| Java News & Music |
Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager
UML - Diagramm
| 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
| Java News & Music |
Die VerbindungenDie Verbindungen – Die Klasse usermanager – Die Klasse usermanager
Ermitteln der IP
Aufbau der Ein- und Ausgabeströme
| 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
| Java News & Music |
Die Klasse Time Die Klasse Time
Generierung der aktuellen Serverzeit
Rückgabe der Uhrzeit an die Klasse mainmanager
| 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
| Java News & Music |
Die SimulationDie Simulation – Eine Nachricht im Chat – Eine Nachricht im Chat
| 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
| Java News & Music |
Der ChatDer Chat – Projektarbeit 2003 – Projektarbeit 2003
stephan volgmann | rafael nenna | andre berning