Du mußt den Rückgabewert von ReceiveNetworkData() auswerten.
ReceiveNetworkData gibt - 1 zurück, wenn aus dem Netzwerks-
Empfangsbuffer nichts zu holen war, und das wird bei einer
Repeat Schleife ohne Delay wohl öfters der Fall sein.
Bei erfolgreichem Empfang gibt Dir ReceiveNetworkData() die
tatsächlich empfange Bytezahl zurück, wie Nic bereits geschrieben
hat.
Wird -1 zurückgegeben, dann ist PeekS unzulässig, der alokierte Speicher
sollte auch nicht mehr benutzt werden.
Ungetestet (hab gerade kein Netzwek zur Hand) etwa so sollte es klappen:
Code: Alles auswählen
Repeat
*buffer = AllocateMemory(16)
If *buffer
result = ReceiveNetworkData(connectionid,*buffer,16)
If result > 0
text + PeekS(*buffer,result)
a = FindString(text,#CRLF$ + #CRLF$,1)
fehlerzaehler = 0
Else
Delay(3)
fehlerzaehler + 1
IF fehlerzaehler > 2000
MessageRequester("", "Timeout")
FreeMemory(*buffer)
Break
Endif
Endif
FreeMemory(*buffer)
Else
MessageRequester("", "zuwenig Speicher")
Break
Endif
Until a
So in etwa, ungetestet, mit Timeout. Was machst Du wenn
dein CRLF nicht kommt ?
Das ständige Alokieren vom Speicher fällt zeitmäßig nicht sehr
ins Gewicht, da der "Nachschub" vom Netzwerk entschieden langsamer
ist, bietet aber mehr Sicherheit im Störfall.
Nachdem Du den String ohnedies zusammenpfriemelst würde ich
gleich mehr Speicher alokieren .... es sei denn Du hast auf Deinem
PC Speichermangel
Das String-Limit wäre auch noch zu beachten .....
Eleganter wäre es vor dem String einen Header zu senden, der zumindest
die zu erwartende Stringlänge angibt. Du bist dann auf das CRLF
nicht angewiesen und kannst auch einen ProgressBar einrichten.
Cu von Team100
Kompliziert kann es jeder lösen, aber das wirklich Geniale ist einfach.....