Entwickler-Ecke

Internet / Netzwerk - T*Socket


Piranha - Fr 25.07.08 21:21
Titel: T*Socket
Hallo,

ich benutze die Indy Komponenten TClientSocket und TServerSocket.
Ich programmiere testweise einen kleinen Chat, was auch erst sehr gut funktioniert hatte.

Nun Baue ich grade eine Userlist ein. Allerdings ist somit auch ein Protokoll
notwendig geworden. Dadurch müssen machmal viele Pakete sehr schnell hintereinander abgesendet.
Mein Problem ist nun das, einige Pakete dadurch Zusammengepakt werden.

Sende ich zum Beispiel: #CLST und #LISTUser123 ab, dann kommt am Ende '#CLST#LISTUser123' an :(

Da ich erst nur mit der Loopback Adresse getestet/gearbeitet habe, konnte ich die Fehler noch mit Delays beheben. Übers Internet funktioniert das aber nicht mehr.

Hat Jemand eine Lösung wie ich das "Verschmelzen" zweier abgesendeter Pakete verhindern kann?


Xentar - Fr 25.07.08 21:37

1. TClientSocket gehört nicht zu den Indies.
2. Denk dir ein Start- und Endezeichen für dein Protokoll aus. Somit siehst du immer, wann ein Paket aufhört und das nächste anfängt.
"Vorgesehen" sind hierfür die Zeichen $02 = Start of text und $03 = End of text.


Narses - Sa 26.07.08 10:08
Titel: Re: T*Socket
Moin und :welcome: im Forum!

user profile iconPiranha hat folgendes geschrieben:
Mein Problem ist nun das, einige Pakete dadurch Zusammengepakt werden.
Hier ist ein FAQ-Beitrag zur Erläuterung [http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html]. :idea:

user profile iconPiranha hat folgendes geschrieben:
Hat Jemand eine Lösung wie ich das "Verschmelzen" zweier abgesendeter Pakete verhindern kann?
Hier gibt es ein Tutorial dazu [http://www.delphi-library.de/topic_TerminatorzeichenProtokollTutorial++1+Sockets+v400_54269.html]. ;)

cu
Narses


Piranha - Sa 26.07.08 18:55

Danke, deine Tutorials befassen sich genau mit meinem Problem. :zustimm: :flehan:
Zu dumm das ich sie selber nicht gefunden hab.

Damit hat sich er Thread praktisch erledigt.