# Client-Client-Chat ohne Serverbeteiligung



## JavaNewb (27. Mrz 2008)

hallo erstmal,
ich habe folgendes problem, ich soll einen chat schreiben mit 2 clients und einem server. client 1 soll sich beim server anmelden und die adresse von client 2 erfragen. anschließend sollen beide clients direkt miteinander kommunizieren können ohne serverbeteiligung. das heißt ich soll eine direkte chatverbindung zwischen den beiden clients haben. das ganze soll mit sockets realisiert werden.
eine normale client-/server-verbindung herzustellen, ist ja nicht schlimm, aber wie kann ich dann die direkte chatverbindung zwischen den beiden clients realisieren? ich hatte es bisher so gemacht, dass jeder client in einem eigenen thread läuft. kann ich dann mit dem client aus dem einen thread trotzdem mit dem anderen client vom anderen thread kommunizieren?

vielen dank im voraus


----------



## Tsunamie (28. Mrz 2008)

Hallo,
ich hoffe ich verstehe dich richtig: du läßt beide Clients innerhalb von einem Programm laufen? 

Ich würde so vorgehen:

Client 1 erfragt beim Server Adresse von Client 2. Dann baut Client 1 über einen weiteren Socket eine Verbindung zu Client 2 auf. Damit hast du deine direkte Kommunikation zwischen 1 und 2...


----------



## Rontu (28. Mrz 2008)

Solange du beide Clients in einem Programm laufen lässt kannst du sie auch direkt per PipedInputStream und PipedOutputStream verbinden. Dafür musst du keine Netzwerkverbindung aufbauen. Wäre in dem Fall überflüssig. 

Willst du aber nachher die Clients unabhängig voneinander auf verschiedenen Maschinen laufen lassen, wäre es schon besser den Client netzwerkfähig zu machen. 

Im Prinzip muss jeder Client auch ein Server sein. Soll heißen, der Server muss wissen welche IP zu welchem Client gehört. Client 1 meldet sich am Server an. Client 2 meldet sich am Server an. Der Server kennt also beide IPs. Jetzt muss nur geklärt werden, wer von den beiden Clients die Serverrolle übernimmt. Wenn nun z.B. Client 2 den ServerSocket öffnen soll, kann sich Client 1 darauf verbinden und somit können beide Clients direkt kommunizieren. Der Server ist also außen vor.


----------

