Script hängt sich auf beim Datei Senden auf

  • Ich habe ein Problem
    und zwar habe ich 2 kleine scripts geschreiben, die für den datenaustausch von Datein sind, allerdings, geht die statusanzeige nicht und bei großen dateien merk er nicht das er schon fertig ist mit Dateisendung ist, obwohl es bei kleinen dateien geht ?(
    Veleicht könntet ihr euch das mal angucken

    Sender
    [autoit]

    Do
    $IP = InputBox ("IP","Gib die IP ein")
    If @error Then Exit
    Until $IP <> ""
    If Not Ping ($IP) Then Exit MsgBox (16,"Error","Diese IP ist nicht Online")
    $File = FileOpenDialog ("Wähle die Datei aus",@DesktopDir,"Alle Dateien (*.*)")
    $Name = StringTrimLeft ($File,StringInStr ($File,"\",0,-1))
    $Read = FileRead ($File)
    TCPStartup ()
    $Con = TCPConnect ($IP,80)
    IF $Con = -1 Then Exit MsgBox (16,"Error","Konnte keinen Server auf dieser IP finden")
    $Size = FileGetSize($File)
    TCPSend ($Con,"Datei|"& $Name & "|" & $Size)
    Do
    $recv = TCPRecv ($Con,2048)
    If $recv = "0" Then Exit MsgBox (16,"Error","Der Partner hat die Datei nicht angenommen!")
    Sleep (100)
    Until $recv = "1"
    $SizeOld = $Size
    ProgressOn ("Dateiübertragung","Die Datei wird übertragen","0%",Default,Default,18)
    While StringLen ($Read)
    $x = TCPSend($con, $Read)
    MsgBox (0,"","Bla")
    If @error Then ExitLoop
    $Size -= $x
    ProgressSet ($Size / $SizeOld *100,$Size / $SizeOld *100 & "%")
    Sleep (100)
    $Read = StringTrimLeft($Read, $x)
    Do
    Sleep (10)
    Until TCPRecv ($Con,2048) = "1"
    WEnd
    TCPSend ($Con,"ENDE")
    ProgressOff ()
    TCPShutdown ()
    MsgBox (64,"Fertig","Die Datei wurde komplett übertragen")

    [/autoit]
    Empfänger
    [autoit]

    #include <INet.au3>
    TCPStartup ()
    $TCP = TCPListen (_GetIP(),80)
    Do
    $Con = TCPAccept ($TCP)
    Until $Con <> -1
    $Split = StringSplit (_Recv (),"|")
    If $Split[1] = "Datei" Then
    If MsgBox (1,"Dateisendung","Ihnen wird die Datei " & $Split[2] & " gesendet") = 1 Then
    $File = FileSaveDialog ("Wählen sie den Speicherort und Namen",@DesktopDir,"(*." & StringTrimLeft ($Split[2],StringInStr ($Split[2],".",0,-1)) & ")",Default,$Split[2])
    TCPSend ($Con,"1")
    While 1
    $recv = _Recv()
    If $recv = "ENDE" Then
    Exit MsgBox (64,"Feritg","Die Datei wurde komplett übertragen!")
    Else
    FileWrite ($File,$recv)
    $recv = ""
    TCPSend ($Con,"1")
    EndIf
    Wend
    Else
    TCPSend ($Con,"0")
    EndIf
    EndIf
    Func _Recv ()
    Local $recvf
    Do
    $recvf = TCPRecv ($Con,1024)
    Sleep (10)
    Until $recvf <> ""
    Return $recvf
    EndFunc

    [/autoit]

    mfg. Jam00

    Einmal editiert, zuletzt von Jam00 (31. August 2009 um 17:39)

  • Ja, gibt es und was zu groß ist wird nicht gesendet, wird nur das maximum gesendet und der rüggabewert ist die die länge wie fiel gesendet wurde, und das schneide ich ja mir StringTrimLeft ab und sende wieder, ich habe jetzt mal im empfangscript eine Progressbar reingebaut, da geht es:

    Sender
    [autoit]

    Do
    $IP = InputBox ("IP","Gib die IP ein")
    If @error Then Exit
    Until $IP <> ""
    If Not Ping ($IP) Then Exit MsgBox (16,"Error","Diese IP ist nicht Online")
    $File = FileOpenDialog ("Wähle die Datei aus",@DesktopDir,"Alle Dateien (*.*)")
    $Name = StringTrimLeft ($File,StringInStr ($File,"\",0,-1))
    $Read = FileRead ($File)
    TCPStartup ()
    $Con = TCPConnect ($IP,80)
    IF $Con = -1 Then Exit MsgBox (16,"Error","Konnte keinen Server auf dieser IP finden")
    $Size = FileGetSize($File)
    TCPSend ($Con,"Datei|"& $Name & "|" & $Size)
    Do
    $recv = TCPRecv ($Con,2048)
    If $recv = "0" Then Exit MsgBox (16,"Error","Der Partner hat die Datei nicht angenommen!")
    Sleep (100)
    Until $recv = "1"
    $SizeOld = $Size
    ProgressOn ("Dateiübertragung","Die Datei wird übertragen","0%",Default,Default,18)
    While StringLen ($Read)
    $x = TCPSend($con, $Read)
    MsgBox (0,"","Bla")
    If @error Then ExitLoop
    $Size -= $x
    ProgressSet ($Size / $SizeOld *100,$Size / $SizeOld *100 & "%")
    Sleep (100)
    $Read = StringTrimLeft($Read, $x)
    Do
    Sleep (10)
    Until TCPRecv ($Con,2048) = "1"
    WEnd
    TCPSend ($Con,"ENDE")
    ProgressOff ()
    TCPShutdown ()
    MsgBox (64,"Fertig","Die Datei wurde komplett übertragen")

    [/autoit]
    Empfänger
    [autoit]

    #include <INet.au3>
    TCPStartup ()
    $TCP = TCPListen (_GetIP(),80)
    Do
    $Con = TCPAccept ($TCP)
    Until $Con <> -1
    $Split = StringSplit (_Recv (),"|")
    If $Split[1] = "Datei" Then
    If MsgBox (1,"Dateisendung","Ihnen wird die Datei " & $Split[2] & " gesendet") = 1 Then
    $File = FileSaveDialog ("Wählen sie den Speicherort und Namen",@DesktopDir,"(*." & StringTrimLeft ($Split[2],StringInStr ($Split[2],".",0,-1)) & ")",Default,$Split[2])
    TCPSend ($Con,"1")
    ProgressOn ("Dateiübertragung","Die Datei wird übertragen","0%",Default,Default,18)
    $SizeAdd = 0
    While 1
    $recv = _Recv()
    If $recv = "ENDE" Then
    Exit MsgBox (64,"Feritg","Die Datei wurde komplett übertragen!")
    Else
    $SizeAdd += StringLen ($recv)
    ProgressSet ($SizeAdd / $Split[3] *100,Round ($SizeAdd / $Split[3] *100,2) & "%")
    FileWrite ($File,$recv)
    $recv = ""
    TCPSend ($Con,"1")
    EndIf
    Wend
    Else
    TCPSend ($Con,"0")
    EndIf
    EndIf
    Func _Recv ()
    Local $recvf
    Do
    $recvf = TCPRecv ($Con,1024)
    Sleep (10)
    Until $recvf <> ""
    Return $recvf
    EndFunc

    [/autoit]

    mfg. Jam00

    Einmal editiert, zuletzt von Jam00 (1. September 2009 um 16:17)