FAQ 0018: Wie verhindere ich, daß Winsock zwei Datensätze zu einem zusammensetzt?
von Helge Rex
Frage
Ich sende mit Winsock nacheinander zwei Datensätze (Texte, Zahlen, Bilder). Beim Empfänger sind die beiden Datensätze aber zu einer zusammengefaßt. Wie verhindere ich das?
Antwort
Winsock arbeitet ereignisorientiert, d.h. die zu sendenden Daten landen erst in einem Puffer, den Winsock verwaltet. Sobald Windows eine Nachricht verschickt, daß die Controls ihre Arbeiten zu erledigen haben, kann auch Winsock den Inhalt des Puffers versenden.
Man kann Windows sagen, daß es jetzt Zeit bekommt, die Controls zu aktualisieren. Dazu muß man DoEvents aufrufen.
Winsock1.SendData "Erster Datensatz" DoEvents Winsock1.SendData "Zweiter Datensatz"
DoEvents ist aber nicht das Wahre, da die eigene Anwendung unter Umständen lange warten muß, bis es die Kontrolle zurück erhält.
Deshalb ist es besser, die zu versendenden Daten "einzupacken": Man definiere einen Delimiter, der garantiert nicht in den Daten vorkommt:
Private Const strIPDelimiter As String = "[IP]" Private Const strNickDelimiter As String = "[Nick]" Private Const strPackageDelimiter As String = "{[NewPackage]}" Winsock1.SendData strIPDelimiter & "192.168.1.1" & _ strPackageDelimter Winsock1.SendData strNickDelimiter & "Daniel Düsentrieb" & _ strPackageDelimiter
Die empfangenen Daten kann man so prima splitten:
Dim strPackages() As String Dim strPackage As String Dim lngPackage As Long Winsock1.GetData strPackage strPackages = Split(strPackage, strPackageDelimiter) For lngPackage = LBound(strPackages) To UBound(strPackages) strPackage = strPackages(lngPackage) Debug.Print strPackage Next lngPackage
Die einzelnen Pakete werden getrennt voneinander verarbeitet und man muß sich keinen Kopf mehr über das gemeinsame Versenden der Daten machen.
Ihre Meinung
Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.