TCP Transfer von großen Dateien Error

  • Hallo Leute,
    ich habe zur Zeit ein problem, das meine UDF nicht genügend memory allozieren kann.
    Error ist wie folgt:

    Code
    Error: allocating memory.

    Ich denke das passiert beim öffnen der Datei, bin mir allerdings nicht 100%ig sicher.

    Der Quellcode ist eine modifizierte Variante von DJ Baselord.

    [autoit]

    Func _TCPSendFile($sFile,$sPath,$sIP, $name ,$iPort = 10001, $iSleep=100,$iPartsize=8192)
    TCPStartup()

    [/autoit][autoit][/autoit][autoit]

    ;open and read the file into $hFileRead
    $hFile = FileOpen($sFile,16)

    [/autoit][autoit][/autoit][autoit]

    $hFileRead = FileRead($sFile)
    FileClose($hFile)

    [/autoit][autoit][/autoit][autoit]

    ;calc filesize
    $iFilesize = BinaryLen($hFileRead)

    [/autoit][autoit][/autoit][autoit]

    ;if filesize is 0 return error
    If Not BinaryLen($hFileRead) Then Return SetError(2,0,0)

    [/autoit][autoit][/autoit][autoit]

    ;try to connect to server until it is successful, log the results
    Do
    $iConnectedSocket = TCPConnect($sIP,$iPort)
    If $iConnectedSocket > 0 Then
    ; FileWriteLine($log, "["&$date&" "&$time&"] Event: Connection established.")

    [/autoit][autoit][/autoit][autoit]

    Else
    ; FileWriteLine($log, "["&$date&" "&$time&"] Error: Connection could not established errorcode is: "& @error)
    MsgBox(0,"Connect Socket","Error during establishing connection")
    EndIf
    Sleep(1000)
    Until $iConnectedSocket > 0

    [/autoit][autoit][/autoit][autoit]

    ;search from the right of the filename and cut before first backslash (from the right side)
    $sFile = StringTrimLeft($sFile,StringInStr($sFile,"\",-1,-1))

    [/autoit][autoit][/autoit][autoit]

    ;loop which transfer the files and informations
    Do
    ;send informationes over the connected socket, seperated by Chr(3)
    $TCPSend = TCPSend($iConnectedSocket,@IPAddress1 &Chr(3)& @ComputerName &Chr(3) & "Transfer" & Chr(3) & "File" & Chr(3) & $sPath & Chr(3) & $sFile & Chr(3) & $iFilesize&Chr(3))
    Sleep(100)

    [/autoit][autoit][/autoit][autoit]

    Until $TCPSend > 0
    ;MsgBox(0,"TCPSend",@IPAddress1 &Chr(3)& @ComputerName &Chr(3) & "Transfer" & Chr(3) & "File" & Chr(3) & $sPath & Chr(3) & $sFile & Chr(3) & $iFilesize&Chr(3))

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;send the main file, which is stored in $hFileRead in the size of $iPartsize*8
    Do
    $TCPSend = TCPSend($iConnectedSocket,BinaryMid($hFileRead,1,$iPartsize*8))

    [/autoit][autoit][/autoit][autoit]

    ;$hFileRead is the remainder which wasn´t transfered
    $hFileRead = BinaryMid($hFileRead,1+$TCPSend)

    [/autoit][autoit][/autoit][autoit]

    ;Sleep($iSleep)
    Sleep(100)
    ;_GUICtrlStatusBar_SetText($StatusBar1, @TAB & "Send File", 0)
    ; If BinaryLen($hFileRead) >0 Then
    ;_GUICtrlStatusBar_SetText($StatusBar1, @TAB & ""&$name&@TAB & Round(($iFilesize/BinaryLen($hFileRead)))&"%", 1)
    ; Else
    ;_GUICtrlStatusBar_SetText($StatusBar1, @TAB & ""&$name&@TAB &"100%", 1)
    ; EndIf
    Until BinaryLen($hFileRead) <= 0
    TCPCloseSocket($iConnectedSocket)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; FileWriteLine($log, "["&$date&" "&$time&"] Eregnis: Client: "&@ComputerName&" hat die Datei "&$sFile&" erfolgreich an den Server: "&$sIP&"übertragen.")

    [/autoit][autoit][/autoit][autoit]

    TCPShutdown()
    Return 1
    EndFunc

    [/autoit]

    Der Fehler tritt bei dateien größer 150 MB auf.
    Ich bin für jede Hilfe dankar.

    Gruß Ashitaka

  • Vielen dank
    wie stelle ich es an, das er durch die datei geht?
    Denn wenn ich nur die Anzahl angebe, dann ließt er ja jedesmal die bits davor, welche schon übertragen wurden nochmal mit ein und schickt sie wieder rüber.

    Gruß Ashitaka

  • BZW mal nachdenk und vlt selbst die func auslegen das es in einem schleifendurchgang nur ein paket sendet....
    Also ein stück lesen, ein stück senden,
    nicht alles einlesen und dan senden.