![]() |
Mehrere Sockets in einer Anwendung
Hi,
ich möchte, einfach nur zur Übung, einen kleinen Chat schreiben. Also auch mit Server. Das Problem sind die Sockets. Ich benötige ja mehrere Sockets. Nun ist die Frage, wie man das am besten lösen könnte. Die Sockets sollen ja dafür da sein, dass ich zu jedem Verbunden Clienten etwas senden kann. Dafür müsste ich dann das entsprechende Socket, welches für den entsprechenden Clienten ist, benutzen. Ich dachte eventuell an:
Delphi-Quellcode:
Ich möchte aber lieber erstmal eure Vorschläge lesen.
Variable: array of TClientSocket;
Danke für Hilfe im Voraus! MfG: sk0r |
Re: Mehrere Sockets in einer Anwendung
Normal verbindet man sich nicht zu jedem Client.
Du verbindest dich nur zum Server und schickst dem dann alle Nachrichten und Empfänger. Der leitet sie dann weiter. |
Re: Mehrere Sockets in einer Anwendung
Das Prinzip ist mir völlig klar. Ich weiß nur nicht, wie ich es umsetzen soll.
Ich brauche doch für jeden Clienten einen Socket, der die Verbindung zu dem Clienten "handlet". Oder wie macht man das sonst? Da bräuchte ich Hilfe. |
Re: Mehrere Sockets in einer Anwendung
Du brauchst für jeden Client einen Socket, der die Verbindung zum Server hält. Das wolltest Du oben glaube ich.
Dafür würde ich mir mal den TIdTCPServer anschauen von den Indy-Klassen. Der ist meiner Meinung nach ganz gut. Sollte es auch Beispiele für geben. |
Re: Mehrere Sockets in einer Anwendung
Ich habe bis jetzt immer die TServerSocket Komponente aus der ScktComp Unit benutzt
und möcht nur dann eine andere nehmen, falls es mit ihr wirklich nicht funktioniert. Geht das denn mit dieser Komponente nicht? Das sollte doch eigentlich funktionieren. Mit Indy kenne ich mich gar nicht aus. Hat jemand Erfahrung mit der TServerSocket Komponente? |
Re: Mehrere Sockets in einer Anwendung
Der ServerSocket hat eine Untereigenschaft Connections[] und ConnectionCount. Darin findest du den Socket zu jedem Client der mit dir verbunden ist. Somit kannst du doch leicht nach empfangen einer Nachricht von einem Client diese an alle anderen Clients weitersenden.
Delphi-Quellcode:
procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i: Integer; lMsg: string; begin lMsg := Socket.ReceiveText; for i := 0 to pred(ServerSocket1.Socket.ConnectionCount) do begin if ServerSocket1.Socket.Connections[i] <> Socket then // nicht an den Sender selbst schicken ServerSocket1.Socket.Connections[i].SendText(lMsg); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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