Suche FileOverTCP funktion

  • hey..ich bin seit tagen auf der suche nach einer geeigneten Funktion um dateien per tcp zu versenden...doch ich finde leider keine ... entweder funktioniert sie nicht richtig oder sie ist total unübersichtlich

    dann hab ich vor paar stunden die FileOverTCP funktion von GTASpider gefunden:

    Die erste File Over TCP Funktion


    die wäre eigentlich genauu das was ich bräuchte, leicht über ne funktion aufzurufen, viele zusatzeinstellungen, aber leider empfang ich bei großen dateien nur 4kb mehr net...


    kennt jmd vlt eine Funktion die so ähnlich ist wie die von GTA?

  • Ich hatte einmal einen Server/Client geschrieben, in dem IrfanView remote gesteuert und anschließend das Bild per TCP übertragen wird. Da funktioniert das einwandfrei. Auch > 4kB.

    Hier die beiden Beispiele: RemoteIVScan V2

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hallo,

    Jajaja - Ich weiß, sie ist veraltet. Ich setze mich die Tage mal dran wenn ich wieder Zeit finde und überarbeite sie ;)

    Gruß
    Spider

    Die Funktion die ich verwendet habe und die zu damaliger Zeit einwandfrei lief, ist aber von "DJ Baselord".

    Was aber nicht heißen soll das ein Teil seiner Funktion, Ähnlichkeiten mit Deiner haben könnte.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • @ Micha_he


    also die Funktion funktioniert echt super..hab sie noch aweng auf meine bedürfnisse angepasst und bin wirklich zufrieden...

    mir ist nur eine Sache aufgefallen...wenn jetzt zb der Client beim Senden offline geht, denkt der server immernoch dass etwas übertragen wird..wie kann ich da eine error abfrage reinbauen?

  • Unter Umständen so:

    Neue Recv-Funktion
    [autoit]

    Func _TCPRecvFile($sFile,$sIP,$iPort,$iTimeout=0,$bPopup=1,$bShowMessageOnSuccess=1,$iSleep=10,$iPartsize=128)
    Local $ListeningSocket, $hTimer, $iConnectedSocket, $iCurrenttime, $Recv, $iFilesize, $SFilename
    Local $sBuffer, $iFilesizeMB, $iNewTime, $iOldTime, $iRate, $iSent, $iTime, $hFile
    Local $IsError = False ; Variable definieren
    If $bPopup Then ProgressOn("Empfang des Scan's","Warte auf Sendung des Scans","Warten",-1,-1,16)
    $ListeningSocket = TCPListen($sIP,$iPort)
    If $bPopup And Not $iTimeout Then ProgressSet(0,"Warte auf Verbindung")
    If $bPopup And $iTimeout Then ProgressSet(0,"Warte noch "&$iTimeout&" Sekunden")
    If $iTimeout Then $hTimer = TimerInit()
    Do
    $iConnectedSocket = TCPAccept($ListeningSocket)
    Sleep(100)
    If $bPopup And $iTimeout Then
    $iCurrenttime = Int(TimerDiff($hTimer)/1000)
    ProgressSet((TimerDiff($hTimer)/1000)/$iTimeout*100,"Warte noch "&$iTimeout-$iCurrenttime&" Sekunden")
    If $iCurrenttime >= $iTimeout Then
    ProgressSet(100,"Timeout abgelaufen. Es wurde kein Scan gesendet !")
    Sleep(5000)
    SetError(1)
    ProgressOff()
    Return 0
    EndIf
    EndIf
    Until $iConnectedSocket > -1
    Do
    $Recv = TCPRecv($iConnectedSocket,2048)
    Sleep(100)
    Until $Recv <> ""
    $Recv = StringSplit($Recv,Chr(3))
    $iFilesize = $Recv[2]
    $SFilename = $Recv[1]
    $sBuffer = Binary("")
    If $bPopup Then
    $hTimer = TimerInit()
    $iFilesizeMB = Round($iFilesize/1024^2,2)
    ProgressSet(0,"Sende 0.0 von "&$iFilesizeMB&" MB @ 0.0 kb/s","Datei senden...")
    EndIf
    Do
    $Recv = TCPRecv($iConnectedSocket,$iPartsize*1024)
    If @error Then ; hier den Fehler abfragen und reagieren
    $IsError = True
    ExitLoop
    EndIf
    $sBuffer &= Binary($Recv)
    Sleep($iSleep)
    If $bPopup Then
    $iNewTime = TimerDiff($hTimer)
    $iTime = $iNewTime - $iOldTime
    $iRate = (BinaryLen($Recv)/$iTime)/1.024
    $iSent = (BinaryLen($sBuffer))/1024^2
    ProgressSet($iSent/$iFilesizeMB*100,"Empfange "&Round($iSent,2)&" von "&$iFilesizeMB&" @ "&Round($iRate,2)&" kb/s")
    $iOldTime = $iNewTime
    EndIf
    Until BinaryLen($sBuffer) >= $iFilesize
    If $IsError = False Then ; wenn keine Fehler dann...
    If $sFile = "" Then $sFile = $SFilename
    $hFile = FileOpen($sFile,18)
    FileWrite($hFile,$sBuffer)
    FileClose($hFile)
    $sBuffer = ""
    TCPCloseSocket($ListeningSocket)
    TCPCloseSocket($iConnectedSocket)
    If $bShowMessageOnSuccess Then MsgBox(64+262144,"Empfang des Scan's","Scan erfolgreich empfangen")
    ProgressOff()
    Return 1
    Else ; ansonsten zeige immer eine Fehler-Messagebox
    MsgBox(48+262144,"Fehler","Scan konnte nicht komplett empfangen werden !")
    $sBuffer = ""
    TCPCloseSocket($ListeningSocket)
    TCPCloseSocket($iConnectedSocket)
    ProgressOff()
    Return 0
    EndIf
    EndFunc

    [/autoit]

    Ich habe das aber nicht getestet, da ich gerade anderweitig beschäftigt bin. Einige Zeilen sind etwas verändert. Wichtige Punkte sind mit Kommentaren versehen.

    Edit: Habe gerade noch einen Fehler korrigiert.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • so ging es nicht, aber ich hab das jetz so gemacht das @error nur bei TCPReceive steht (also Binary davor weg) und dannach einfach die Variable von TCPReceive in Binary rein...


    auf jeden Fall danke^^