# eine klasse mit server & client



## nachtgrabb (23. Dez 2011)

hallo ihr lieben,

ich bräuchte mal eure hilfe!
ich habe 3 klassen - alice, bob und cathy.
alice muss bob eine nachricht schicken können, auf die er antwortet. bis hierher habe ich es so gelöst, dass bob einen server hat, alice besitzt einen client (aus den schönen java.io-klassen).
jetzt sollen die beiden nicht mehr direkt reden laufen, sondern über cathy moderiert die diskussion.
aber ich weiß nicht so genau, wie ich das anstellen soll..!
ich dachte mir das so, dass cathy sowohl einen server, als auch einen client besitzt.
nur wie? 

so ein server muss ja vor dem client gestartet werden.
nur muss mein server ja ab dem moment des startens die ganze zeit seinen client-socket-inputStream überwachen. die methode, die das tut, kommt erst zu ihrem return statement, wenn ein client "bye" schreibt..
deswegen kann ich schlecht irgendwie in cathys constructor schreiben 
server = new Server(); 
client = new Client();
weil ich ja bei dem client nie ankomme...
als nur bob und alice da waren, habe ich das einfach so gelöst, dass ich die beiden nicht in der gleichen instanz meines programms gestartet habe, sonder in zwei separaten - so als säßen bob und alice jeder an ihrem eigenen pc.
aber für cathy funktioniert das so ja nicht.. *kopfkratz

ein bisschen habe ich mit Threads rumprobiert, weil ich dachte, dass die beiden sachen dann gleichzeitig laufen könnten, aber das wollte nicht tun :-/


hat jemand den roman zu ende gelesen und kann mir einen rat geben?
ist der Thread-ansatz richtig?
großes danke im vorraus und schöne weihnachten euch allen! 

liebe grüße,
die euli

p.s: ich hoffe, ich hab' die richtige rubirk für das thema ausgesucht..


----------



## irgendjemand (23. Dez 2011)

Thread-Ansatz : aber definitiv richtig und auch nötig ...

aber den rest verstehe ich nicht ?

wenn cathy ein "moderator" sein soll ... warum sollte cathy dann eine client-komponente haben ?
hier hast du scheinbar ein bisschen was falsch verstanden ...

cathy dient als moderator ... muss also in dem fall "ganz oben" stehen ...
alice und bob sind dann cathy untergeordnet ... brauchen also beide jeweils nur einen client-part ...

das ganze nennt sich dann broadcast-communication ...

ziel und sinn ist es das sich mehrere clients unabhängig von ein ander bei einem server melden ...
also in deinem fall alice und bob bei cathy ...

wie du dann daten von einem client zu einem anderen weiterreichst kommt auf die umgebung an die du aufbauen willst ...

als wo sehr einfaches beispiel *chat* : Kaffee & Kuchen - Datenbank-Anbindung mit JDBC

dort ist "cathy" der "server" der alle verbindungen entgegen nimmt ...
"alice" und "bob" haben jeweils eine instanz des "client" laufen *hier kannst du für alle clienten den selben code nehmen ... musst also nicht dinge wie : ClientAlice und ClientBob schreiben ... sondern nur Client ... den alice und bob unabhängig von ein ander instanzieren* ...

zieh dir den code mal rein und google mal nach tutorials in die richtung "java server client" oder "java chat" und sowas ... da solltest du alles finden was du brauchst ...

bei fragen natürlich immer her damit =D


----------



## nachtgrabb (23. Dez 2011)

hallo irgendjemand! 

vielen dank für deine ausführliche antwort! 
der link war hilfreich! alice und bob sind jetzt erstmal threads.. 
wie cool! *freu,freu

die sache ist jetzt nur die, dass es durch die aufgabenstellung vorgegeben ist, dass sich durch das erscheinen von cathy für alice und bob nichts ändert. die quatschen sozusagen einfach weiter miteinander, nur über einen zwischenschritt cathy, von dem sie aber möglichst nichts mitbekommen.
alice hat weiter einen client, bob einen server.
nur soll alice jetzt nicht direkt an bob schreiben, sondern an cathy, die das, nach sorfgältiger prüfung des inhalts oder so, an bob weiterreicht. cathy bekommt dann bobs antwort, checkt die und hält sie alice hin.

nur, da geht's los mit kompliziert^^
alice, bob und cathy haben eine gemeinsame superklasse. letztere extended jetzt erstmal Thread (damit sie in der gleichen main-methode laufen können und ich nicht in 2 verschiedenen eclipse-workspaces rumwursteln muss^^)
der server extended die Observable-klasse aus java.io, bob implementiert das Observer-interface (damit bob informiert wird, wenn eine nachricht von alice eintrudelt und darauf reagieren kann).

but what to do with poor cathy?
sie will ja auch von ihrem server informiert werden, wenn der post bekommt und dann mit dem client antworten, deswegen wäre es ja schön, wenn der server weiterhin observable wäre... allerdings darf er ja nicht gleichzeitig ein Thread sein *haare rauf


ich bin... verwirrt^^


----------



## irgendjemand (23. Dez 2011)

da ich deine aufgabenstellung ja nun leider nicht kenne *wäre vielleicht sinnvoll diese mal zu posten* würde ich jetzt auf "proxy" tippen ...

was mir auch nicht ersichtlich wird : alle drei klassen werden von der selben main gestartet ?

! HALT !

du hast den link nicht ganz verstanden ...
eine solche umgebung löst man grundsätzlich dadurch das man wirklich für alle parteien eine eigene VM-instanz laufen hat ...

persönlich : ich bin nicht gerade begeistert von anfänger zu hören das diese IDEs nutzen ... kamen schon oft fragen wie man so manche grundlagen ohne IDE löst ... no further comment

in dem fall hab ich wohl etwas an deiner aufagbe vorbei geredet ...

wenn sich für alice und bob nichts ändern soll ... dann baust du alice und bob erstmal wieder so um wie sie waren BEVOR cathy ins spiel kam ...

DANN baust du cathy ...
hier braucht cathy dann natürlich einen server teil und einen client teil ...

schlussendlich baust du den client *wenn ich richtig gelesen habe alice ?* so um das sich dieser teil anstatt zum eigentlichen server zu cathy verbindet ...

damit das geht muss cathy natürlich dauerhaft eine server-instanz laufen haben ...

so bald nun also eine verbindung bei cathy eingeht baut diese von sich selbst mit hilfe des client-teils die verbindung zum eigentlichen server *bob* auf und verknüpft beide seiten mit ein ander *natürlich kann hier gefiltert werden* ...

start-reihenfolge wäre dann also

server bob
proxy cathy
client alice

hilft dir das vielleicht jetzt so weiter oder habe ich das problem immer noch nicht ganz erfasst ?


----------



## nachtgrabb (23. Dez 2011)

> [..] so bald nun also eine verbindung bei cathy eingeht baut diese von sich selbst mit hilfe des client-teils die verbindung zum eigentlichen server *bob* auf und verknüpft beide seiten mit ein ander [..]




danke! 
das war's, worauf ich nicht gekommen bin^^
jetzt läuft's 

danke, dass du mir geholfen hast! 
jetzt freue ich mich eine runde, dass ich morgen nicht programmierend unterm tannenbaum sitzen muss! *gg

schöne weihnachten dir!! 




p.s:
dass das mit den threads da keine wirklich schöne simulation von 3 programmteilen, die eig auf unterschiedlichen rechnern laufen, ist, ist mir schon klar - nur ist es so schön praktisch und ich hab mich so gefreut, dass ich dieses konstrukt endlich auch mal verwendet habe


----------



## irgendjemand (23. Dez 2011)

hmm ... wie gesagt : kann ich persönlich nicht ganz nachvollziehen *obwohl ich auch viel mit sockets rumspiele* ...
liegt wohl daran das ich nur mit Notepad2 und CMD programmiere ... und da ist es ja kein problem mal eben 1 oder 2 terminals gleichzeitig mehr offen zu haben um dann dort server oder anderes laufen zu lassen ...
sollte mir mal überlegen mir ne IDE zuzulegen *oh mich graust es jetzt schon vor kaputten lib-pfaden ...*

ansonsten dir auch frohe weinachten und schön das ich dir den nötigen denkanstoß geben konnte ...


----------

