Andreas21 hat geschrieben:Hi,
nun hab ich das Problem wenn ich den Server auf einem Debian 5 Server lauffen lasse und auf Windows den Client, das ich nur das "haha1" bekomme und mehr nicht.
Hm ... komisches Problem. Hab leider keinen Debian - Server zur Hand um das zu testen. Zwischen Win-Win ist alles ok? Und wenn der Client auf Debian läuft und der Server auf Windows? Das einzige was mir grade einfällt, du könntest probieren in der ENM_Paket.pbi in der Procedure _ENM_ReceivePakets() den Wert von ReceiveBlockSize von 32*1024 auf 8*1024 oder 4*1024 zu ändern, bzw. du könntest dir die Variable GesMemSize im Debugger anzeigen lassen um festzustellen ob es daran liegt das nichtmal alle Daten ankommen oder das Problem an der Paket-Zerlegung liegt.
//Edit:
So, hab jetzt Zugriff auf meinen Source. Kannst du folgende änderungen an der ENM_Pakets.pbi vornehmen und mir das ergebniss mitteilen:
Am Anfang das Source:
Code: Alles auswählen
; ------------------------------------------------------------------------------------
; Paket Settings:
; Wie oft soll probiert werden fehlende Daten nachzuladen?
#ENM_Paket_MaxReloads = 5
; Wie viele Ms soll zwischen den Versuchen gewartet werden?
#ENM_Paket_ReloadDelay = 128
; ------------------------------------------------------------------------------------
Gegebenenfalls noch weiter erhöhen.
Und diese 2 Macros/Proceduren ersetzen:
Code: Alles auswählen
; Reload probieren
Macro _ENM_Paket_TryReload()
If RLCount < #ENM_Paket_MaxReloads
RLCount + 1
Debug "Try Reload " + Str(RLCount)
Delay(#ENM_Paket_ReloadDelay)
Continue
EndIf
EndMacro
; Paket empfangen
Procedure _ENM_ReceivePaket(*ENM.ENM_Data, Connection)
Protected ReceiveBlockSize, BlockCount, GesMemSize, *PaketMem._ENM_PaketHeader, Rest, Pos, RLCount, *MemBase
Protected *Paket._ENM_Pakets_Data = _ENM_NewPaket(), *uMem
ReceiveBlockSize = 8*1024 ;32*1024 ; Empfangsblock-größe
BlockCount = #Null ; Anzahl Blöcke
GesMemSize = #Null ; GesamtSpeicher-größe
*PaketMem = #Null ; Speicher
*MemBase = #Null ; Speicher - Grundadresse
Repeat
*PaketMem = *MemBase ; Nötig falls nachgeladen werden muss
Repeat ; Daten einlesen
*PaketMem = ReAllocateMemory(*PaketMem, (BlockCount + 1)*ReceiveBlockSize)
Rest = ReceiveNetworkData(Connection, *PaketMem + GesMemSize, ReceiveBlockSize)
GesMemSize + Rest
BlockCount + 1
Until Rest<>ReceiveBlockSize
Debug "GesMem: "+Str(GesMemSize)
*MemBase = *PaketMem ; Nötig zum freigeben + Nachladen
*PaketMem + Pos ; Nötig Falls Nachgeladen werden muss
If GesMemSize >= SizeOf(_ENM_PaketHeader) ; Haben wir wenigstens einen gültigen Header?
While GesMemSize-Pos > 0 ; Speicher durchgehen
If (*PaketMem\Sign!*PaketMem\Sign2) = $FF; Prüfen ...
If (*PaketMem\Size + Pos + SizeOf(_ENM_PaketHeader)) <= GesMemSize ; Passen die Angaben?
; Neues Paket erstellen
AddElement(*Paket\Pakets())
If *PaketMem\comp ; Kompression
; Daten entpacken
*uMem = zLib_uncompress(*PaketMem + SizeOf(_ENM_PaketHeader), *PaketMem\Size, *PaketMem\cSize)
If *uMem ; entpacken Ok
; Paket schreiben
*Paket\Pakets()\MemSize = *PaketMem\cSize
*Paket\Pakets()\Mem = *uMem
; Weiterzählen
Pos + *PaketMem\Size + SizeOf(_ENM_PaketHeader) ; Position anpassen
*PaketMem + SizeOf(_ENM_PaketHeader) + *PaketMem\Size ; Pointer anpassen
EndIf
Else ; keine Kompression
; Paket schreiben
*Paket\Pakets()\MemSize = *PaketMem\Size
*Paket\Pakets()\Mem = AllocateMemory(*Paket\Pakets()\MemSize)
*PaketMem + SizeOf(_ENM_PaketHeader) ; Auf Dateposition gehen
CopyMemory(*PaketMem, *Paket\Pakets()\Mem, *Paket\Pakets()\MemSize) ; Daten abspeichern
; Weiterzählen
*PaketMem + *Paket\Pakets()\MemSize ; Adresse Anpassen
Pos + *Paket\Pakets()\MemSize + SizeOf(_ENM_PaketHeader) ; Position anpassen
EndIf
Else ; Reload probieren
_ENM_Paket_TryReload()
EndIf
Else
Debug "Signature Error"
EndIf
Wend
Else ; Reload probieren
_ENM_Paket_TryReload()
EndIf
Until #True
ResetList(*Paket\Pakets()) ; Liste auf anfang setzen
FreeMemory(*MemBase) ; Speicher freigebn
ProcedureReturn *Paket ; Pakete zurückgeben
EndProcedure
Ich kann den Fehler hier nicht reproduzieren aber wie gesagt, ich hab auch keinen Debian 5 Server :P
Gruß, Alex