![]() |
Chatproramm über Server(/Client-)Socket
Hallolo zusammen..
Ich bin momentan an einem Schulprojekt für den Infounterricht beschäftigt: Wir sollen ein Chatprogramm entwerfen.. Soweit so gut, es funktioniert im Standartmodus, aber bei der Implementierung eines Extrafeatures reagiert Delphi so, wie ich es nicht erklären kann.
Delphi-Quellcode:
procedure TServer.ssServerClientRead(Sender: TObject;
Socket: TCustomWinSocket); var Clantag : String; i : Integer; begin Socket.ReceiveBuf(BuffRecord, SizeOf(BuffRecord)); if BuffRecord.Typ = 'Online' //Wenn Client connected, sendet dieser eine Onlinemeldung then begin //an den Server i := 0; while (i < lbClients.Items.Count) and (BuffRecord.Nickname <> lbClients.Items[i]) do Inc(i); //Überprüfung, ob Nickname schon vorhanden ist if i = lbClients.Items.Count then begin //Falls nein, Client hinzufügen und Änderung im Netzwerk machen lbClients.Items.Append(BuffRecord.Nickname); Clientliste_aktualisieren; end else begin //Falls ja, Nachricht an den Client vorbereiten Buffrecord.Typ := 'Nachricht'; Buffrecord.Nickname := 'Server'; Buffrecord.Clantag := ''; Buffrecord.Text := 'Nickname "' + lbClients.Items[i]+ '" schon vorhanden!'; ssServer.Socket.Connections[ssServer.Socket.ActiveConnections-1].SendBuf(BuffRecord, SizeOf(BuffRecord)); ssServer.Socket.Connections[ssServer.Socket.ActiveConnections-1].Close; // Socket.SendBuf(BuffRecord, SizeOf(BuffRecord)); // Socket.Close; //Nachricht und Closebefehl senden end; end Und in den letzten zwei bzw vier Zeilen tritt das Problem auf: Egal an welchen Connections-Index ich den Buf sende, es erhalten ihn alle Clienten (unabhängig ob dort "Connections[ActiveConnections-1", "lbClient.Items.Count" oder ein fester Wert (zB 1) eingetragen ist). Wenn ich das Close rausnehme, erhält der neue, doppelte Client den Buf sogar zweimal. Und auch bei Socket.SendBuf und Socket.Close geschied dasselbe, obwohl doch der Socket in der Prozedur eigentlich der sein müsste, von dem die doppelte Anmeldung ausgeht.. Achja, der Closebefehl erreicht immer den richtigen... Kann mir einer da weiterhelfen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz