Guten morgen zusammen,
ich habe von @GtaSpider die Skript-Basis genutzt (folgender Thread) um Dateien per TCP zu senden / empfangen. Leider Funktionieren keine ".exe"-Dateien. Beim Empfänger ist die Datei um einen gewissen Grad kleiner. Hat einer eine Idee woran das liegen kann?
Datei senden:
AutoIt
#NoTrayIcon
#Include <File.au3>
AutoItSetOption("GUICloseOnESC", 1) ;ändern auf 0 wenn fertig
AutoItSetOption("TrayAutoPause", 0)
AutoItSetOption("TrayIconHide", 1)
TCPStartup()
$CheckR01 = @IPAddress1 ;Empfänger
$GetDataName = @ScriptDir & "\text.exe" ;Datei
_FileSend($GetDataName,$CheckR01)
Func _FileSend($sFile, $IP, $PORT = 5103,$iSplash=0, $iWaitWhileConnected = 1)
Local $iMainSocket = -1, $sBuff, $iFileOp,$sRecv
If Not FileExists($sFile) Then Return SetError(1,0,-1)
If $iSplash Then $iSplash = SplashTextOn('','Try To Connect...',200,20,-1,-1,1)
TCPStartup()
If Number($iWaitWhileConnected) = 1 Then
While $iMainSocket = -1
$iMainSocket = TCPConnect($IP, $PORT)
WEnd
Else
$iMainSocket = TCPConnect($IP, $PORT)
If @error Then Return SetError(2, 0, -1)
EndIf
If $iSplash Then ControlSetText($iSplash,'','Static1','Read File...')
$iFileOp = FileOpen($sFile, 16)
If @error Then Return SetError(3,0,-1)
$sBuff = Binary(StringTrimLeft($sFile,StringInStr($sFile,"\",-1,-1))&",")&FileRead($iFileOp)
FileClose($iFileOp)
If $iSplash Then ControlSetText($iSplash,'','Static1','Sending File...')
While BinaryLen($sBuff)
$iSendReturn = TCPSend($iMainSocket, $sBuff)
If @error Then Return SetError(4, 0, -1)
TrayTip('',$iSendReturn,1)
$sBuff = BinaryMid ($sBuff, $iSendReturn + 1, BinaryLen ($sBuff) - $iSendReturn)
WEnd
If $iSplash Then ControlSetText($iSplash,'','Static1','Succesfull!')
TCPCloseSocket($iMainSocket)
TCPShutdown()
Sleep(1000)
SplashOff()
Return 1
EndFunc
Alles anzeigen
Datei empfangen:
AutoIt
Global $DATATRANSPORT = 5103
_FileReceive("", @IPAddress1, $DATATRANSPORT)
Func _FileReceive($sFileName = '', $IP = @IPAddress1, $PORT = 5103,$iSplash=0)
Local $iMainSocket, $iAccSocket = -1, $sBuff, $sRecv = "", $i = 0, $iFirstWhile = True
Local Const $TCP_RECEIVELEN = 4096
TCPStartup()
$iMainSocket = TCPListen($IP, $PORT)
If @error Then Return SetError(1,0,-1)
If $iSplash Then $iSplash = SplashTextOn('','Wait For Incoming...',200,20,-1,-1,1)
While $iAccSocket = -1
$iAccSocket = TCPAccept($iMainSocket)
Sleep(50)
WEnd
$sBuff = Binary ($sBuff)
If $iSplash Then ControlSetText($iSplash,'','Static1','Incoming...')
While $sRecv = ""
$sRecv = TCPRecv($iAccSocket, 2048, 1)
$sRecv = BinaryToString ($sRecv)
WEnd
If $iSplash Then ControlSetText($iSplash,'','Static1','Receive File...')
While $sRecv <> ""
If StringInStr($sRecv, ',') And $iFirstWhile = True Then
$sTmp = StringLeft($sRecv, StringInStr($sRecv, ",") - 1)
$savedata = FileSaveDialog("TC-Client | Dateiübertragung",@DesktopDir,"Alle Dateien (*.*)",0,$sTmp)
$sRecv = StringTrimLeft($sRecv, StringLen($sTmp) + 1)
If StringLen($sFileName) < 1 Then $sFileName = $sTmp
$iFirstWhile = False
EndIf
$sBuff &= $sRecv
$sRecv = BinaryToString (TCPRecv($iAccSocket, 2048, 1))
If @error Then ExitLoop
WEnd
If $iSplash Then ControlSetText($iSplash,'','Static1','Write To File...')
If FileExists($savedata) Then
$sTmp = StringSplit($savedata, ".")
If $sTmp[0] < 2 Then
While 1
$i += 1
If Not FileExists($savedata & "(" & $i & ")") Then
$savedata = $savedata & "(" & $i & ")"
ExitLoop
EndIf
WEnd
Else
While 1
$i += 1
If Not FileExists($sTmp[1] & "(" & $i & ")" & $sTmp[2]) Then
$savedata = $sTmp[1] & "(" & $i & ")." & $sTmp[2]
ExitLoop
EndIf
WEnd
EndIf
EndIf
$iFileOp = FileOpen($savedata, 16 + 2)
If @error Then Return SetError(2,0,-1)
FileWrite($iFileOp, $sBuff)
If @error Then Return SetError(3,0,-1)
FileClose($iFileOp)
If $iSplash Then ControlSetText($iSplash,'','Static1','Succesfull!')
TCPCloseSocket($iAccSocket)
TCPShutdown()
Sleep(1000)
Return 1
EndFunc ;==>_FileReceive
Alles anzeigen