AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy TCP Client Server - Verständnisfragen und Empfehlungen
Thema durchsuchen
Ansicht
Themen-Optionen

Indy TCP Client Server - Verständnisfragen und Empfehlungen

Ein Thema von 361 · begonnen am 22. Jan 2015 · letzter Beitrag vom 27. Jan 2015
Antwort Antwort
361

Registriert seit: 27. Okt 2005
Ort: Berlin und Brandenburg
93 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Indy TCP Client Server - Verständnisfragen und Empfehlungen

  Alt 22. Jan 2015, 20:39
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

Geändert von 361 (22. Jan 2015 um 20:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Indy TCP Client Server - Verständnisfragen und Empfehlungen

  Alt 23. Jan 2015, 14:35
Ich habe mich damit auch mal länger befasst und hier mal meine Threads (incl. einiger Tests) zusammengesammelt:

http://www.delphipraxis.net/180134-i...ptimieren.html
http://www.delphipraxis.net/179457-i...verwendet.html
http://www.delphipraxis.net/171226-i...o-clients.html
http://www.delphipraxis.net/170904-i...bertragen.html
http://www.delphipraxis.net/179722-2...indy-10-a.html

Mein Projekt funktioniert für meine Anforderungen sehr gut. Ich bin aber kein TCP-Experte.

Vielleicht ein paar grundsätzliche Dinge:

Der Client fragt beim Server an und wartet auf Antwort. Es wird also eine Verbindung aufgebaut und aufrecht erhalten bis sie wieder geschlossen wird.
Die Anfrage kann z.B. so aussehen:

Zitat:
Ich bin Client xyz.
Sag mir mal den Kontostand.
Die Antwort lautet dann
Zitat:
20.000
Ich wüsste jetzt nicht, dass der Server die IP des Client erkennt, aber notfals kannst Du sie im Rahmen des Protokolls übergeben.

Streams übergeben ist kein Problem. Ich wandle sogar StringLists in Streams, damit Sonderzeichen korrekt übertragen werden.

Vielleicht hilft das ja schon mal für den Anfang und Du kannst ja dann genauer fragen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Indy TCP Client Server - Verständnisfragen und Empfehlungen

  Alt 24. Jan 2015, 08:10
Als Protokoll würde ich HTTPS verweden - damit sind die meisten Punkte der Wunschliste abhakbar.

Nur falls die Kommunikation auch bidirektional (d.h. der Server sendet Nachrichten auch ohne vorhergehenden Request des Client) sein sollte, wären andere Protokolle (Websockets, Telnet, Stomp) passender als HTTPS.

Bei HTTP(S) sind beliebige Nachrichteninhalte (binär oder Text, z.B. JSON, XML) übertragbar.

Indy enthält mit TIdHttpServer und TIdHttp eine umfassende server- und clientseitige Implementierung, die mit hundert Verbindungen problemlos umgehe kann.
Michael Justin

Geändert von mjustin (24. Jan 2015 um 08:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Indy TCP Client Server - Verständnisfragen und Empfehlungen

  Alt 24. Jan 2015, 11:51
Fragen:
- sind die Indy-Komponenten hierzu empfehlenswert bzw. gibt es bessere Alternativen für Delphi?
Für diese Anzahl würde ICS von Overbyte nutzen!

Mavarik
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.136 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Indy TCP Client Server - Verständnisfragen und Empfehlungen

  Alt 24. Jan 2015, 20:53
hier noch ein Link zu Demos "INDY10/XE2"

http://sourceforge.net/projects/indy10clieservr/
  Mit Zitat antworten Zitat
361

Registriert seit: 27. Okt 2005
Ort: Berlin und Brandenburg
93 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Indy TCP Client Server - Verständnisfragen und Empfehlungen

  Alt 27. Jan 2015, 18:50
Hallo,

und zunächst mal vielen Dank für Eure Antworten.

Die Kommunikation soll bidirektional sein. Ich habe bereits viel gelesen, insbesondere hier im Forum.

@Mavarik: Was ist der Vorteil von ICS zu Indy? Kannst Du da ein paar Dinge nennen?

Ich habe ansonsten noch meine konkrete Frage, zu der ich bisher nirgends die Antwort finden konnte: Wenn ich mehrere parallele Client-Verbindungen zum TCP Server habe, wie kann ich als TCP Server unterscheiden, mit wem ich aktuell kommuniziere? Ich habe das "IdTCPServerExecute"-Event in welchem ich die Daten empfange. Ich möchte und muss unterscheiden, was mir Client 1 und 2 und... geschickt hat. Wie stelle ich das am besten an? Deshalb auch die Frage, wie ich die Source-IP heraus bekomme. Ich schaue mir noch mal die Links von Stahli an, vielleicht finde ich dort noch etwas und freue mich ansonsten auf Eure Antworten, die ich nun auch zeitnah beantworten kann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz