Java News & Music
Der Chat
stephan volgmann | rafael nenna | andre berning
Inhalt
| Java News & Music |
• Ziele und Anforderungen
• Aufgabenstellung
• Der Server - Klasse
• Das Chatplugin
• Die Ein- Ausgabeströme der Nachrichten
• Simulation des Chats
• Installation
Ziele & Anforderungen
| Java News & Music |
Attraktivitätssteigerung von Java News & Music
Austausch von Nachrichten & Informationen
Der Chat als kommunikatives Forum & Treffpunkt
Aufgabenstellung
| Java News & Music |
Ein Java Chat im Rahmen der Projektarbeit Java News & Music
Aufgabenverteilung:
Der Server  Andre Berning
Das Chatplugin als Applet  Rafael Nenna
Die Ein-/Ausgabeströme  Stephan Volgmann
Die Klasse mainmanager –
Der Server
| Java News & Music |
 Warum ein eigener Server ?
 Aufgaben des Servers
 Funktionsweise der Klasse mainmanager
Die Klasse mainmanager -
Warum ?
| Java News & Music |
Applets können untereinander aufgrund der
Java Sicherheitsbeschränkungen schlecht kommunizieren !
Die Klasse mainmanager -
Aufgaben
| Java News & Music |
Aufbau der Sockets und Verwaltung
der einzelnen Chatteilnehmer
 Senden der Nachrichten an alle User
 Zuweisung des Usernamens anhand der IP-Adresse
Die Klasse mainmanager -
Sockets & User
| Java News & Music |
Aufbau eines ServerSockets am Port 5666:
try {
wait = new ServerSocket(PORT);
}
catch (IOException e) {...}
 Anschließend dauerhafte Überwachung des Ports durch einen
Thread
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) { ... }
Die Klasse mainmanager -
Sockets & User
| Java News & Music |
-Was passiert bei einer Verbindungsaufnahme?
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 –
Das Senden
| Java News & Music |
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
Die Klasse mainmanager -
Die Usernamen
| Java News & Music |
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.
Die Klasse mainmanager -
Die Zeitausgabe
| Java News & Music |
 In unserem Chat werden zwei Zeitausgaben generiert
Das Chatplugin | Java News & Music |
 Aufgaben
 Anforderung
 Realisierung
Realisierung
Das Chatplugin | Java News & Music |
 Anforderungen
 Probleme
 GridBagLayout
Layout
Das Chatplugin –
Screenshots Layout
| Java News & Music |
0/0
1/0
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
0/1
1/1
public void init()
{
GridBagLayout gbl = new GridBagLayout();
this.setLayout(gbl);
this.setBackground(Color.lightGray);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(4,4,4,4);
outputarea = new TextArea
("",23,1,outputarea.SCROLLBARS_VERTICAL_ONLY );
chatInput = new TextField("Ihre Nachricht",40);
Das Chatplugin –
Screenshots Layout
| Java News & Music |
0/0
1/0
040
041
042
043
044
045
046
0/1
1/1
//TextArea outputarea
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
gbl.setConstraints(outputarea, c);
add(outputarea);
outputarea.setEditable(false);
Das Chatplugin-
Die Kommunikation
| Java News & Music |
Socketverbindung
Problem
= IP des Hosts + Portnummer
Das Chatplugin –
Ermittlung der IP
| Java News & Music |
067
068
069
070
071
public void start()
{
try
{
URL
myURL
072
String
073
mysocket
= this.getCodeBase();
myHostIP = myURL.getHost();
= new Socket(myHostIP, PORT);
Das Chatplugin -
Ablauf
| Java News & Music |
Einstieg in den Chat
init()
start()
Das Chatplugin –
Thread
| Java News & Music |
067
068
089
090
091
092
093
094
095
public void start()
{ ...
}
if (mythread == null)
{
mythread = new Thread(this);
mythread.setPriority(Thread.MIN_PRIORITY);
mythread.start();
}
Das Chatplugin -
Texteingabe
| Java News & Music |
Benutzer „Rudi“ gibt Nachricht ein:
„Hello World“
Drücken der send-Schaltfläche oder der Enter-Taste
Das Chatplugin –
Eventhandling
| Java News & Music |
PrintStream outline;
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
public void actionPerformed(ActionEvent e)
{
String theText = chatInput.getText();
outline.println(theText);
chatInput.setText("");
}
public void keyPressed (KeyEvent e)
{
if (e.getKeyCode()==KeyEvent.VK_ENTER)
{
String theText = chatInput.getText();
outline.println(theText);
chatInput.setText("");
}
}
Das Chatplugin –
PrintStream
| Java News & Music |
PrintStream outline;
manmanager.class
chatplugin.class
usermanager.class
time.class
Das Chatplugin | Java News & Music |
chatplugin.class
Lauschen
Das Chatplugin -
Lesen
| Java News & Music |
BufferedReader inputline;
144
145
146
147
148
149
chatplugin.class
while(true)
{
line = inputline.readLine();
if(line!=null)
outputarea.append(line+'\n' );
}
Das Chatplugin -
Thread
| Java News & Music |
098 public void stop()
099 {
100
try
101
{
102
mysocket.close();
103
}
104
…. …….
109
110
111
112
113
114
115
}
if ((mythread !=null) && mythread.isAlive())
{
mythread.interrupt();
mythread = null;
136 public void run()
}
137 {
138
139
while(mythread.isInterrupted() == false)
….
Das Chatplugin -
Ablauf
| Java News & Music |
Die HTML-Datei in der das Applet implementiert ist, wird aufgerufen.
Das Chatplugin -
Ablauf
| Java News & Music |
init()
- Layoutmanager wird festgelegt
- grafische Komponenten ausgerichtet und angezeigt.
Das Chatplugin -
Ablauf
| Java News & Music |
start()
try
- aus der URL wird die IP - Adresse des Hosts ermittelt
- eine Socketverbindung wird zum Host hergestellt
- Erzeugung eines BufferedReader-Objektes um
Datenstom auslesen zu können
- PrintStream-Objekt um Daten an den
Stream senden zu können wird erzeugt
catch
- Ausgabe von Fehlermeldungen
- Systemaustieg
- Information über gelungene Verbindung anzeigen
- Neuen Thread mit niedriger Priorität starten
Das Chatplugin -
Ablauf
| Java News & Music |
run()
solange der Thread nicht unterbrochen ist
try
catch
ständig den InputStream auf neue Daten überwachen
nein
neue Daten vorhanden ?
ja
Daten ausgeben
- Fehlermeldung ausgeben
Die Verbindungen – Die Klasse usermanager
| Java News & Music |
Die Funktionen im Überblick:
 Zuständig für Verbindungen zwischen den User
 Übernimmt die vom Server übergebenen Verbindungen
 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 Verbindungen – Die Klasse usermanager
| Java News & Music |
Anfrage
Übergabe der
Verbindungen
Aufbau der
Ein /
AusgabeStröme
Die Verbindungen – Die Klasse usermanager
| Java News & Music |
UML - Diagramm
Die Verbindungen – Die Klasse usermanager
| Java News & Music |
 Importieren der verwendeten Pakete
SocketVerbindung
DataInputStream
PrintStream
 Übergabe der Verbindungen vom Server
Die Verbindungen – Die Klasse usermanager
| Java News & Music |
 Aufbau der Ein- und Ausgabeströme
 Ermitteln der IP
Die Verbindungen – Die Klasse usermanager
| Java News & Music |
 Rückgabe der Chat- Nachrichten an die Methode allmembers
 Rückgabe der IP- Adresse
Die Klasse Time
| Java News & Music |
 Generierung der aktuellen Serverzeit
 Rückgabe der Uhrzeit an die Klasse mainmanager
Die Simulation – Eine Nachricht im Chat
| Java News & Music |
mainmanager.class starten
Lauschen auf
Nachricht von Chatter
auf Verbindung warten
usermanager erhält
Socketverbindung
Lesen der Nachricht
Ermitteln der IP
Weitergabe an Chatter
Benutzername + Zeit +
Nachricht
Zuweisung des Benutzernamens
Die Simulation – Eine Nachricht im Chat
| Java News & Music |
How To Use – Die Installation
| Java News & Music |
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 Startzeit
ausgegeben
Der Chat – Projektarbeit 2003
| Java News & Music |
stephan volgmann | rafael nenna | andre berning

Java News & Music