Connection zum Client
-
Hallo!
Ich habe versucht, einen einfachen Chat über Server & Client zu schreiben.
Folgendes Problem:Ich starte den Server & einen Client. Der Server empfängt das vom Client gesendete.
Der Client empfängt auch ebenfalls die Daten vom Server.Nun öffne ich einen zweiten Client. Wenn ich von ihm aus was schreibe, sendet er die Dateien auch zum Server & empfängt den Chatinhalt. Allerdings empfängt nun Client1 keine Daten mehr. Der geschriebene Text wird aber weiterhin empfangen.
Ich denke, dass es an folgender Zeile liegt, weiß jedoch nicht wo genau der Fehler ist, bzw. was ich ändern muss.
(Auszug vom Server):
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { RichEdit1->Text = RichEdit1->Text +"\n" + Socket->ReceiveText(); ServerSocket1->Socket->Connections[0]->SendText(RichEdit1->Text); }Danke
-
Hmmm. Wenn Du immer Connections[0] nutzt ist es ja klar, dass immer nur ein Client die Daten empfängt. Du musst das ganze so proggen, dass dein Client die Daten an den Server schickt und dieser diese Information an alle Clients weiter sendet. Das kannst Du mit ActiveConnections und 'ner kleinen for-Schleife lösen. Schau am besten mal in die Hilfe zu Connections und ActiveConnections.
Gruss
-
Habe ich schon gemacht, nur leider ist kein Beispiel dabei. Ich muss dann Connections[i-1] einstellen oder? Da ja der index 0 für den ersten Client ist.
Aber wie komme ich an mein i? klar mit activeconnections, aber muss ich da
ServerSocket1->Socket->ActiveConnection = i ; machen?
-
Ich denke mal, eine for-Schleife mit i < ServerSocket1->Socket->ActiveConnection wird der richtige Weg sein: für jede Connection einmal senden, dann kommt's überall an.
-
Hatte mal sowas ähnliches:
void TForm1::SendText(AnsiString Text) { int Verbindungen = ServerSocket1->Socket->ActiveConnections; for(int x = 0; x <= Verbindungen - 1; x++) ServerSocket1->Socket->Connections[x]->SendText("<" + Text + ">"); }
-
ok ich probiers...
//Edit:
Danke funktioniert super!