so, ein Problem gelöst und gleich das nächste Problem am Start

Bei mir gibt es ein Problem beim Datenempfang über TCP/IPv4...vielleicht hat jemand einen goldenen Tipp für mich...
Ich sende über TCP ein Bild...die Prozedur auf dem Server sieht so aus (ist ein leicht veränderter Schnipsel hier aus dem Forum):
Code: Alles auswählen
Procedure.l Server_SendImage(lImage.l)
Define *ImageMemory = EncodeImage(lImage, #PB_ImagePlugin_PNG)
ForEach List_Clients()
Protected sent.i, sentTotal.i = 0
While Not sentTotal = MemorySize(*ImageMemory)
sent = SendNetworkData(List_Clients(), *ImageMemory + sentTotal, MemorySize(*ImageMemory) - sentTotal)
If sent = -1 : ProcedureReturn #False : EndIf
sentTotal + sent
Wend
Next
FreeMemory(*ImageMemory)
ProcedureReturn #True
EndProcedure
Auf dem Client wird das Bild mit diesen Anweisungen empfangen (als Thread laufend):
Code: Alles auswählen
Procedure NetClient_Update(*Value)
Repeat
If Thread_NetClient_ShouldStop : ProcedureReturn : EndIf
Define ClientEvent.l = NetworkClientEvent(lNetConnection)
If ClientEvent
Select ClientEvent
Case #PB_NetworkEvent_Data
Protected *Buffer = AllocateMemory(65000)
Protected *ReceivedPacket = #Null
Protected ReceivedLen.q
Protected AppendAddress.i
Repeat
ReceivedLen = ReceiveNetworkData(lNetConnection, *Buffer, MemorySize(*Buffer))
*ReceivedPacket = ReAllocateMemory(*ReceivedPacket, ReceivedLen)
AppendAddress = MemorySize(*ReceivedPacket) - ReceivedLen
CopyMemory(*Buffer, *ReceivedPacket + AppendAddress , ReceivedLen)
If ReceivedLen < MemorySize(*Buffer)
Break
EndIf
ForEver
Define ReceivedImage.l = CatchImage(#PB_Any, *ReceivedPacket)
VisuUpdate(ReceivedImage)
Case #PB_NetworkEvent_Disconnect
ProcedureReturn
EndSelect
EndIf
ForEver
EndProcedure
Nun ist es so, dass die Purebasic-eigene Prozedur CatchImage() nicht immer ein gültiges Image zurück gibt. Also würde ich auf die Variable "ReceivedImage" ein IsImage() ansetzen, so kommt nur selten ein #True heraus. Meistens nach dem Start des Programms, dann gar nicht mehr. Manchmal kommt es auch zu einem Fehler wegen falschen Speicheradressenzugriff (falls ich es im Debugger starte).
Das komische ist jedoch...während der Entwicklungszeit (auf dem gleichen Rechner, mit Localhost 127.0.0.1) lief es perfekt...egal wie lange man das ganze laufen lies...Bild für Bild wurde perfekt übertragen.
Jetzt im Einsatz über ein reales LAN und zwei PC's, gibts plötzlich diese Probleme.
Hat jemand einen Tipp, woran es liegen könnte, oder wo ich vielleicht eine Gurke reinprogrammiert habe?
Wer sich wundert, was das mit AppendAddress und CopyMemory() soll...falls die übertragenen Daten zu groß sind und über mehrere Pakete verteilt werden, müssen diese ja wieder in der richtigen Reihenfolge zusammengesetzt werden. Das war so meine Idee zur Lösung...vielleicht gehts ja auch simpler
