# Socket Verbindungen über mehrere Server



## favi (4. Aug 2011)

Hey =)

Ich möchte folgendes programmieren, bin mir aber nicht sicher wie ich das angehen soll, daher wäre es toll wenn mir jemand einen Tipp geben könnte was hier der beste Weg ist =)

Es gibt ein Client und zwei Server.
Ich nennen diese nun C, S1 und S2.

1. Nun baut C eine Verbindung zu S1 auf. C fordert Daten von S1 an und bekommt diese geschickt. Bis hierher kein Problem.

2. S1 baut eine Verbindung zu S2 auf. Die Verbindung zwischen C und S1 muss allerdings bestehen bleiben. S2 sendet S1 im Anschluss daran Daten.

3. Nun sollen die Daten welche S1 von S2 erhalten hat, von S1 an C über die bestehende verbindung "weitergeleitet" werden.

C und S2 kennen sich also nicht.

Das ganze soll über sockets laufen. Punkt 1 läuft bereits, nur weiß ich nicht wie das nun läuft eine weitere Socket verbindung aufzubauen ohne das die alte verloren geht.

Vielen Dank!
Gruß Favi


----------



## SlaterB (4. Aug 2011)

eine Socket-Verbindung ist eine Code-Zeile wie
> new Socket(host, port);
und dahinter alles mögliche,

wieso vermutest du, dass davon andere Socket-Verbindungen gestört werden?
normalerweise ist das nicht so, hast du irgendwelche konkreten Probleme?


----------



## favi (4. Aug 2011)

Hey, danke erstmal!

Das Problem ist ja das der jeweilige Client immer auf neue Verbindungen wartet aber gleichzeitig eben noch eine Verbindung zu einem anderen Server aufnehmen soll ...


----------



## nillehammer (4. Aug 2011)

Dein Server S1 hat eine Doppelrolle. In seiner Eigenschaft als Server für C ist er ein Server und muss deswegen auf einem ServerSocket horchen (Hast Du ja schon). Auf Anforderung von C soll er nun Daten von S2 holen. In dieser Rolle ist er dann ein Client. Du musst also in der Methode, in der Du auf S1 die Anforderung von C abarbeitest ein neues ClientSocket aufmachen, welches sich mit dem ServerSocket von S2 verbindet. Ob Du bei jeder Anforderung ein neues aufmachst (und danach natürlich auf wieder schließt) oder die Kommunikation zwischen S1 und S2 über eine dauerhafte Verbindung machst, ist Deine Entscheidung.


----------



## SlaterB (4. Aug 2011)

@favi
du meinst dass Server S1 auf Verbindungen von Clients wartet und gleichzeitig 'noch eine Verbindung zu einem anderen Server aufnehmen soll'?
nun, das erste dieser beiden Probleme ist schon schlimm genug, um mehrere Clients zu handeln braucht es Threads usw.,

dass bei jeder Verarbeitung (je Client) ein weiterer Socket aufgemacht wird ist vielleicht noch mehr Arbeit, noch mehr Threads pro Client letztlich, aber strukturell kein Problem,
wenn es für einen Client funktioniert, dann ist quasi egal für wieviele Clients gleichzeitig,

sicher kann es insgesamt nur paar Tausend Sockets gleichzeitig geben, und wahrscheinlich besser noch deutlich weniger Threads in Java,
aber es geht dir ja sicher erstmal um wenige einzelne

------

generell ist durchaus denkbar, dass es von S1 nach S2 nur eine relativ dauerhafte Verbindung gibt, über die alle Belange aller Clients abgehandelt werden


----------

