Hi,
da ich jetz seit einem dreiviertel Jahr immer wieder gelegenheitsmäßig an einem Chat rumbastle und mir mit der zeit neue Features eingefallen sind, stehe ich dementsprechend wieder vor einem Problem.
Ich habe einerseits eine Art Haupt- Chatraum in dem alles über Broadcasts abläuft, so weit so gut. Jetzt möchte ich aber, dass sich zwei Leute separat nen direkten
TCP/
IP Chat aufmachen können.
Schön. Damit das ein User mit mehreren anderen gleichzeitig machen kann (also mehrere "2er Kanäle"), habe ich mir von euch hier was dazu erklären lassen, wie man eine Form mehrmals anzeigen und diese voneinander unterscheiden kann.
Das mal so zur ungefähren Stuktur meines Programmes. So, jetz zum Problem.
Es gibt zwei Möglichkeiten, diese Form "chatfähig" zu machen, also mit nem Client und nem Server (für beide Fälle) auszustatten.
Entweder mach ich wirklich auf jede Form einen Client und einen Server. Würd aber im Netzwerk ziemlich viel "Platz" verbrauchen, da dann jede Form, bzw. jede als Server fungierende Form nen eigenen Port braucht. Und der muss vor Erstellung des Servers erstmal noch auf "Freiheit" geprüft werden, also ob ich da überhaupt nen Server machen kann. Den Port muss ich dann bei jeder neuen 2er Sitzung dem Chatpartner mitteilen. Würd zwar gehen, aber is doch irgendwie blöd und umständlich.
Die andere von mir preferierte Möglichkeit wäre, dass jede Form nur einen Client bekommt, und auf der Hauptform dann ein Server steht, der nur einen Port belegt und die Verbindungen durch die Connections[] unterscheidet. Den Port müsste dann jedes Programm nur beim starten ermitteln (also nen freien) und den dann beim OnlineGehen broadcasten.
Das Problem daran:
Daten Empfangen würd wunderbar gehen. Einfach im entsprechenden Ereignis gucken von welcher Connection das kam und das dann an die entsprechende Form weitergeben.
Aber wie mach ichs dann beim Senden? Die ChatForm kann ja nicht die Hauptform in der usesListe haben, während die Hauptform das auch tut...
Und dann ist es auch egal, ob ich den Server noch in ne seperate
Unit packe, da wäre dann halt dasselbe Problem der beidseitigen Kommunikation (also für denn Fall dass die Form als Server agiert, wenn man Client ist gibts ja keine Probleme diesbezüglich).
Ich stehe also wie im Betreff gesagt vor einem Problem der Logistik. Entweder hat jede Form beides, Client & Server, oder ich mache nur einen Server, kann mit diesem dann aber nicht beidseitig Daten austauschen (also von der Form aus was zum Server schicken aber gleichzeitig was vom Server gesagt bekommen können).
Gibts noch andere Wege?
Was würdet ihr mir empfehlen? Einfach jeder Form nen Server geben und hoffen dass das Prog nie auf ner großen LAN benutzt wird?
Bis dann,
S - tefano