In deinem Fall würde es 2 Richtige möglichkeiten geben, jenachdem wie du es brauchst, weil:
Beispiel:
Peer A,B,C,D
Peer A hat einen Server, die anderen nur Clients
Peer B,C oder D kann dan nur mit A verbinden, weil bei den anderen Peers keiner ist, der die Daten empfängt, weil das nur Server können, also kann Peer B nicht mit Peer C oder D verbinden, da kein Server vorhanden ist.
Also kann, wenn Peer D Daten hat, nur an Peer A senden. Diese kann dan nicht an Peer D und C senden, weil sie keinen Server haben.
1. Möglichkeit
Wenn bei jedem Peer ein Server ist und mehrer Clients, dann kann Peer A mit Peer B und C oder Peer C mit Peer D,B und A und so weiter verbinden.
Du musst also einen Array von Clients machen und einen Server je Peer. Beispiel:
Wenn sich die Daten bei Peer A zum Beispiel ändern, kann Peer A mit Peer B, C und D verbinden und sie senden.
Dass gleiche mit Peer B, der sich dan mit Peer A,C und D verbinden kann und senden kann.
Das würde dan in etwa so ausehen:
Delphi-Quellcode:
TPeer = class
private
FClient: array of TClientSocket;
FServer: TServerSocket;
end;
2. Möglichkeit:
Jeder Peer hat nur einen Server und Client.
Peer A hat Daten für die anderen Peers. Peer A senden sie an Peer B, der sendet sie dann an Peer C und der wiederum dan an Peer D. So haben dan auch alle die Daten.
Das würde kann wie du schon gesagt hast aussehen
Meiner Meinung nach ist die 1. Möglichkeit am günstigsten. Nachteil ist halt, das ein Peer ziemlich viel zu tun hat, bei der 2. Möglichkeit kostet es eher Zeit.