Entwickler-Ecke

Internet / Netzwerk - Frage zu Indy TCP-Komponenten und Netzwerkkommunikation


darius83 - Sa 25.08.12 00:23
Titel: Frage zu Indy TCP-Komponenten und Netzwerkkommunikation
Huhu,

ich wollte nur mal kurz was zu den Indy-Kompos fragen. Ich hoffe ihr könnt mir da weiterhelfen ;)

Also es geht um die TIdTCPClient bzw. TIdTCPServer.
Ich habe damit mal Teile des Netzwerk-Tutorials von Narses nachgebaut, hab aber ein paar Fragen zu der Übertragung der Daten...

Wenn ich z.B. die Protokollversion überprüfen möchte, kann ich dann die Daten nur zusammen übertragen, oder wäre es auch möglich, diese einzeln nacheinander zu übertragen? Ich habs momentan so, dass
1. Der Befehl als Integer
2. Die Versionsnummer als Integer
3. Die Subversionsnummer als Integer
4. Textlänge des nachfolgenden Strings als Integer
5. Protokollname als String
(Ich wandle den String vorher in TIdBytes und sende diese dann... Natürlich auch die entsprechende Länge dazu.)
und zwar nacheinander jeder Teil in einem eigenen Sendebefehl.
Jetzt hab ich mich aber gefragt, ob es theoretisch möglich wäre, dass dadurch Daten von anderen Clients dazwischenrutschen und ich beim Server dann überprüfen muss, von wem das Paket gekommen ist, oder ob das so überhaupt funktionieren kann... Ich teste es ja momentan nur alleine auf meinem Laptop und da klappt es so ohne Probleme...
Aber ich vermute mal, dass es besser wäre, alles zusammen in einem einzigen Datenblock zu senden, oder?

Wäre nett, wenn ihr mir da weiterhelfen könntest.
LG Darius

Edit1:
Ich möchte quasi wissen, was bei der TCP Kommunikation mit Indy-Komponenten oder überhaupt generell besser ist,
mehrere Write-Befehle hintereinander oder besser alles zusammen in einem einzigen Write-Befehl und falls man mehrere benutzt, ob man dann den Absender überprüfen muss, bzw. es möglich ist, dass ein Write-Befehl eines anderen Clienten beim Abarbeiten beim Server dazwischenrutschen kann...

Ich hoffe, dass ihr mich so verstanden habt XD


Narses - Sa 25.08.12 22:02

Moin!

Da ich mich von den Indy-Kompos fernhalte, wenn ich kann, bin ich sicher nicht der Experte dafür. :nixweiss:

Allerdings:
user profile icondarius83 hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt hab ich mich aber gefragt, ob es theoretisch möglich wäre, dass dadurch Daten von anderen Clients dazwischenrutschen und ich beim Server dann überprüfen muss, von wem das Paket gekommen ist,
Das kann ganz sicher nicht passieren, da du im IdTCPServer für jeden Client einen eigenen Thread hast (und dahinter einen eigenen Socket). :idea:

btw: Das ist aber doch auch schon beim TServerSocket so (die separaten Verbindungen), sollte jetzt also nicht soo sehr verwunden. :zwinker: Abgesehen davon: wer sollte jemals mit dem Datensalat fertig werden, wenn im Server von allen Clients die Daten in einer einzigen Connection wieder raus kämen. :hair:

cu
Narses


darius83 - So 26.08.12 20:08

Ok danke dir Narses, dann brauch ich mir darum ja keiune Sorgen zu machen...
Wie steht es denn bei den Indys mit unvollständigen Paketen?
Also was passiert z.B. wenn ich einen String mit 32 Bytes abrufen will und der Abruf gestartet wird, wenn erst 17 Bytes angekommen sind? Wartet der Server dann auf den Rest?

LG Darius83