- Offizieller Beitrag
Hallo!
Ich präsentiere ^^: die erste File Over TCP Funktion
Das Projekt besteht aus 2 Funktionen:
_FileSend
Spoiler anzeigen
#include-once
[/autoit] [autoit][/autoit] [autoit];===============================================================================
;
; Function Name: _FileSend
; Description:: Sending a File to an Server (See _FileReceive)
; Parameter(s):
;$sFile : The File to send
;$IP : The target IP Adress
;$PORT [Optional] : The Port to use (must be the same as by _FileRecevie!!)
;$iSplash [Optional] : 1(defaul) = show SplashText
; 0 = dont show SplashText
;$iWaitWhileConnected [Optional] : 0 = If TCPConnect faild (@error) Return with error Code 2
; 1(Default) = If TCPConnect faild put it in a while until connected
; Requirement(s): -
; Return Value(s): On Succes Return 1
; On faild Return -1 and @error code 1-3:
; @error = 1: File not exist
; @error = 2: TCPConnect faild (only able if $iWaitWhileConnected <> 1)
; @error = 3: Faild to Open File
; @error = 4: A Connectionproblem while sending
; Author(s): GtaSpider
;
;===============================================================================
Func _FileSend($sFile, $IP, $PORT = 4324,$iSplash=1, $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
_FileReceive
Spoiler anzeigen
#include-once
[/autoit] [autoit][/autoit] [autoit];===============================================================================
;
; Function Name: _FileReceive
; Description:: Receives a File from an Client (See _FileSend)
; Parameter(s):
;$sFileName [Optional] : The Filename to save (if default or "" then using the original File Name)
;$IP [Optional] : The IP where the Server run, Default = @IPAdress1
;$PORT [Optional] : The Port to use (must be the same as by _FileSend!!)
;$iSplash [Optional] : 1(defaul) = show SplashText
; Requirement(s): -
; Return Value(s): On Succes Return 1
; On faild Return -1 and @error code 1-3:
; @error = 1: Error creating Listening socket on IP
; @error = 2: Faild to open file
; @error = 3: Faild to write file
; Author(s): GtaSpider
;
;===============================================================================
Func _FileReceive($sFileName = '', $IP = @IPAddress1, $PORT = 4324,$iSplash=1)
Local $iMainSocket, $iAccSocket = -1, $sBuff, $sRecv = "", $i = 0, $iFirstWhile = True
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 Then
$sTmp = StringLeft($sRecv, StringInStr($sRecv, ",") - 1)
$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($sFileName) Then
$sTmp = StringSplit($sFileName, ".")
If $sTmp[0] < 2 Then
While 1
$i += 1
If Not FileExists($sFileName & "(" & $i & ")") Then
$sFileName = $sFileName & "(" & $i & ")"
ExitLoop
EndIf
WEnd
Else
While 1
$i += 1
If Not FileExists($sTmp[1] & "(" & $i & ")" & $sTmp[2]) Then
$sFileName = $sTmp[1] & "(" & $i & ")." & $sTmp[2]
ExitLoop
EndIf
WEnd
EndIf
EndIf
$iFileOp = FileOpen($sFileName, 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
Die Send funktion sendet eine Datei zu einem Server.
Die Receive funktion empfängt eine Datei von einem Client.
Mehr erfahrt ihr in der udf beschreibung über den Funktionen.
Man kann die beieden Funktionen nicht in einem Skript verwenden, da sie ja logischerweise beide Connecten müssen.
Beispiele:
_FileSend Beispiel:
Spoiler anzeigen
_FileSend(@WindowsDir&"\cmd.exe",@IPAddress1);Sendet die datei cmd.exe an die IP adresse @IPAdress1(Also an die eigene)
If @error Then MsgBox(48,"","Error: "&@error)
_FileSend(@WindowsDir&"\cmd.exe","192.168.0.1",4444,0,0);Sendet die datei cmd.exe an die IP adresse 192.168.0.1 über port 4444, Splashtext wird nicht angezeigt und wenn er beim ersten mal Connecten fehlschlägt bricht er ab.
If @error Then MsgBox(48,"","Error: "&@error)
_FileReceive Beispiel:
Spoiler anzeigen
_FileReceive();Speichert die datei mit dem Original namen ab, die IP ist @IPADress1, Port ist 4324 und der Splashtext wird gezeigt
If @error Then MsgBox(48,"","Error: "&@error)
_FileReceive("EineDatei.exe","192.168.0.1",4444,0);Speichert die datei mit dem Namen "EineDatei.exe" ab, die ip ist 192.168.0.1, der Port ist 4444 und der Splashtext wird nicht angezeigt
If @error Then MsgBox(48,"","Error: "&@error)
Bitte um anregungen und bugreport
Mfg Spider