Hallo zusammen,
ich muss eine Kommunikation zwischen mehreren Clients zu einem Server über
TCP/
IP realisieren. Die Clients sind verteilt im Internet erreichbar. Die Clients müssen Daten vom Server abfragen. Spontan fielen mir hierzu die
Indy TCP Client / Server Komponenten ein.
IDE ist Delphi XE,
Indy 10.5.7, Umsetzung soll damit erfolgen, Client-Anzahl ca. 100. Leider finde ich nirgendwo einen gültigen Download für die
Indy TCP Client/Server Demos, daher hier ein paar Beispiele und Fragen. Ich habe bereits für Client und Server jeweils eine Demo-Anwendung implementiert. Die Kommunikation über Strings funktioniert bereits.
Beispiele:
- es sollen Statusabfragen an den Server erfolgen
- es sollen neue Daten abgefragt und in eine
DB importiert werden
- die Clients versuchen, sich zyklisch zu verbinden
- es sollte eine gewisse Verschlüsselung der Daten erfolgen
Fragen:
- sind die
Indy-Komponenten hierzu empfehlenswert bzw. gibt es bessere Alternativen für Delphi?
- wenn ich mehrere parallele Client-Verbindungen habe, wie kann ich als Server unterscheiden, mit wem ich aktuell kommuniziere? ich habe ja nur das "IdTCPServerExecute"-Event, wo alles von allen Clients aufläuft: muss ich hier mit Threads arbeiten und wenn ja wie?
- wie bekomme ich die
IP des Clients heraus? "AContext.Connection.Socket.Binding.PeerIP" ist immer leer, obwohl ich über Mobilfunk mittels Tethering eine Verbindung von meiner Client-Demo zu meiner Server-Demo aufgebaut habe, ich brauche die öffentliche
IP des Clients
- welchen Container (Dateien oder Protokoll) sollte ich bestenfalls zur Übertragung der Daten nutzen? es geht mir hier vor allen Dingen um die Datenkonsistenz. Kann ich sicher gehen, dass Daten auch komplett übertragen wurden wenn es keine
Exception gibt? Oder muss ich damit rechnen, dass Daten verändert/unvollständig übertragen werden ohne, dass eine
Exception auftritt? Stichwort: Fehlerkorrektur. Wie kriege ich als Server heraus, dass ich alle Daten erhalten habe?
- ist eine Verschlüsselung der Daten möglich und worauf muss man hier achten?
Vielleicht noch zur Info: Mir schwebte bisher recht laienhaft vor, Daten mittels IStringList in einen gepackten Stream zum Server zu übertragen. Ich freue mich daher über Eure Erklärungen, Vorschläge und Tipps. Vielen Dank und Gruß Sebastian