#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Version=Beta #AutoIt3Wrapper_Icon=.ico #AutoIt3Wrapper_UseX64=n #AutoIt3Wrapper_Res_Comment=By: careca #AutoIt3Wrapper_Res_Description=TCP Transfer #AutoIt3Wrapper_Res_SaveSource=y #AutoIt3Wrapper_Res_Icon_Add=.ico #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 #AutoIt3Wrapper_Run_Tidy=y #AutoIt3Wrapper_Run_Debug_Mode=n #pragma compile(CompanyName, 'careca') #pragma compile(x64, false) #pragma compile(UPX, False) #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;============================================================================= #include #include #include #include #include #include #include #include ;============================================================================= Opt("TrayMenuMode", 1) Opt("TrayIconHide", 0) Opt("GUIResizeMode", 1) Opt("TrayIconDebug", 1) Opt("TrayAutoPause", 0) Opt("MouseCoordMode", 2) Opt("GUIOnEventMode", 1) Opt("MustDeclareVars", 1) Opt("GUIEventOptions", 1) Opt("TrayOnEventMode", 1) Opt("ExpandEnvStrings", 1) Opt("WinDetectHiddenText", 1) ;============================================================================= Global $CurrentPath = @ScriptDir Global $ServerIp = @IPAddress1 Global $ServerPort = '50911' Global $iOffset = 0 Global $NotFirst = 0 Global $i4KiB = 2048 Global $iFileSize, $Split Global $UpdateDir_MainSocket = -1 Global $UpdateDir_Ret = -1 Global $UpdateDir_Buffer = '' Global $UpdateDir_Bytes = 0 Global $FO, $FolderSel, $SelectFile, $iError, $Socket, $SocketA, $FileDataList, $hFile, $File, $SecSplit, $TCPRecv Global $ChkUpd, $ExitItem, $ServerIpInpt, $Perc, $Label1, $Label2, $Confirm, $ConfirmFE, $FileSize, $StrLeft, $b2Str, $bData2File Global $GUI = GUICreate('TCP Transfer', 200, 150, -1, -1, $WS_SYSMENU) $ServerIpInpt = GUICtrlCreateInput($ServerIp, 10, 10, 100, 20) $SelectFile = GUICtrlCreateButton('FileToSend', 10, 40, 100, 20) GUICtrlSetOnEvent($SelectFile, "FileSel") $Label1 = GUICtrlCreateLabel('TCPListen Socket', 10, 70, 100, 20) $Label2 = GUICtrlCreateLabel('TCPAccept Socket', 10, 90, 100, 20) $ChkUpd = TrayCreateItem("Check Update") TrayItemSetOnEvent(-1, "Update") $ExitItem = TrayCreateItem("Close") TrayItemSetOnEvent(-1, "Quit") HotKeySet('{END}', 'Quit') TraySetState(1) TraySetClick(8) ;GUISetIcon($InstallDir & '\1.ico', -1, $GUI) ;TraySetIcon($InstallDir & '\1.ico') GUISetOnEvent($GUI_EVENT_CLOSE, "Quit") ;GUISetOnEvent($GUI_EVENT_MINIMIZE, "Minimize") GUISetState(@SW_SHOW, $GUI) ;============================================================================= TCPStartup() $UpdateDir_MainSocket = TCPListen($ServerIp, $ServerPort) ConsoleWrite('TCPListen: ' & $UpdateDir_MainSocket & @CRLF) GUICtrlSetData($Label1, $UpdateDir_MainSocket) If $UpdateDir_MainSocket = -1 Then ConsoleWrite('Invalid Socket' & @CRLF) Quit() EndIf ;============================================================================= While 1 $ServerIp = GUICtrlRead($ServerIpInpt) $SocketA = TCPAccept($UpdateDir_MainSocket) GUICtrlSetData($Label2, $SocketA) If $SocketA <> -1 Then Receive() $NotFirst = 0 Quit() EndIf Sleep(50) WEnd ;============================================================================= Func FileSel() $FolderSel = FileSelectFolder('Select Folder to Upload', @ScriptDir, 6, @ScriptDir) If $FolderSel <> '' Then Upload() EndIf EndFunc ;==>FileSel ;============================================================================= Func Upload() $FileDataList = _FileListToArrayRec($FolderSel, Default, $FLTAR_FILES, 1, 0, 1) For $i = 1 To $FileDataList[0] Do $Socket = TCPConnect($ServerIp, $ServerPort) Sleep(100) Until $Socket <> -1 ConsoleWrite('Connected! = ' & $Socket & @CRLF) ConsoleWrite('Sent File: ' & $FileDataList[$i] & @CRLF) ConsoleWrite('FullFilePath: ' & $FolderSel & '\' & $FileDataList[$i] & @CRLF) $iFileSize = FileGetSize($FolderSel & '\' & $FileDataList[$i]) ConsoleWrite('FileSize: ' & $iFileSize & @CRLF) TCPSend($Socket, $FileDataList[$i] & '' & FileGetSize($FolderSel & '\' & $FileDataList[$i]) & '') Sleep(1000) ;============================================================================= $hFile = FileOpen($FolderSel & '\' & $FileDataList[$i], $FO_BINARY) $iOffset = 0 Do FileSetPos($hFile, $iOffset, $FILE_BEGIN) TCPSend($Socket, FileRead($hFile, $i4KiB)) If @error Then $iError = @error MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Could not send the data, Error code: " & $iError) TCPCloseSocket($Socket) Return False EndIf $iOffset += $i4KiB $Perc = Round($iOffset / $iFileSize * 100, 1) If $Perc > 100 Then ConsoleWrite('Progress: 100%' & @CRLF) Else ConsoleWrite('Progress: ' & $Perc & '%' & @CRLF) EndIf Until $iOffset >= $iFileSize FileClose($hFile) ;============================================================================= Do TCPSend($Socket, "{EndOfFile}") $File = TCPRecv($Socket, $i4KiB, 0) ConsoleWrite('FileEndNotification: ' & $File & @CRLF) Until StringInStr($File, 'FileEndNotification') <> 0 ConsoleWrite('FileEndNotification! DoNE!!! ' & $File & @CRLF) TCPSend($Socket, "FileEndNotificationConfirm") ;============================================================================= If $i = $FileDataList[0] Then TCPSend($Socket, "{EndOfTheTransfers}") EndIf ;============================================================================= TCPCloseSocket($Socket) Sleep(1500) Next Quit() EndFunc ;==>Upload ;============================================================================= Func Receive() Do If $NotFirst = 1 Then Do $Socket = TCPAccept($UpdateDir_MainSocket) Sleep(100) Until $Socket <> -1 ConsoleWrite('Connected: ' & $Socket & @CRLF) EndIf Sleep(500) Do $TCPRecv = TCPRecv($SocketA, $i4KiB, 1) ConsoleWrite('TCPRecv: ' & $TCPRecv & @CRLF) ;BinaryToString() Until $TCPRecv <> '' ;$File = BinaryToString($File) $Split = StringSplit(BinaryToString($TCPRecv), '', 1) ;$Split = StringSplit($File, '', 1) If $Split[0] <> 0 Then $File = $Split[1] ConsoleWrite('FileName: ' & $File & @CRLF) $SecSplit = StringSplit($Split[2], '', 1) $FileSize = $SecSplit[1] ConsoleWrite('FileSize: ' & $FileSize & @CRLF) ;$bData &= StringToBinary($SecSplit[2]) ;ConsoleWrite('$SecSplit[2]:' & $bData & @CRLF) ;Sleep(2000) Else MsgBox(64 + 262144, '', 'Split Failed') Quit() EndIf ;============================================================================= Local $bData = Binary("") Local $iDataLen = 0 Local $bEOFReached = False $bData2File = Binary("") Do $bData &= TCPRecv($SocketA, $i4KiB, 1) If @error Then $iError = @error MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Server:" & @CRLF & "Connection lost, Error code: " & $iError) Exit Return False EndIf ConsoleWrite('$bData <> ' & $bData & @CRLF) $iDataLen = BinaryLen($bData) ConsoleWrite('$iDataLen: ' & $iDataLen & ' > TotalSize: ' & $FileSize & @CRLF) $Perc = Round($iDataLen / $FileSize * 100, 1) If $Perc > 100 Then ConsoleWrite('Progress: 100%' & @CRLF) Else ConsoleWrite('Progress: ' & $Perc & '%' & @CRLF) EndIf If $iDataLen >= $FileSize Then ;$bData = '0x' & StringToBinary($bData) ;$bData = Binary("0x" & $bData) ;$bData = BinaryMid($bData, 1, $FileSize - $iDataLen) ;$bData2File = BinaryToString($bData) ;$StrLeft = StringLeft($b2Str, StringInStr($bData, '{EndOfFile}') - 1) ;$bData2File = BinaryToString($bData) $bData = StringTrimLeft($bData, 2) ;$bData = Binary("0x" & $bData) ;$bData2File = _HexToString($bData) ;MsgBox(64 + 262144, '_HexToString', $bData2File) ;$bData2File = BinaryToString($bData2File) ;MsgBox(64 + 262144, 'BinaryToString', $bData2File) $bData2File = $bData ;============================================================================= $FO = FileOpen('1.txt', 26) FileWrite($FO, "0x" & $bData) FileClose($FO) ;============================================================================= $bEOFReached = True ConsoleWrite('$bEOFReached = True !!' & @CRLF) EndIf Until $bEOFReached = True DirCreate(@ScriptDir & '\Downloaded\') $FO = FileOpen('Downloaded\' & $File, 26) FileWrite($FO, "0x" & $bData2File) FileClose($FO) ;============================================================================= Do TCPSend($SocketA, 'FileEndNotification') $Confirm = TCPRecv($SocketA, $i4KiB, 0) Sleep(100) If StringInStr($Confirm, '{EndOfTheTransfers}') <> 0 Then ExitLoop Until StringInStr($Confirm, 'FileEndNotificationConfirm') <> 0 ;============================================================================= ;$bData = '' ;$iDataLen = 0 Sleep(500) ;$Confirm = TCPRecv($SocketA, $i4KiB, 0) TCPCloseSocket($SocketA) $NotFirst = 1 Until StringInStr($Confirm, '{EndOfTheTransfers}') <> 0 ConsoleWrite('{EndOfTheTransfers} DoNE!!! ' & $Confirm & @CRLF) EndFunc ;==>Receive ;====================================================================================== Func Update() TrayItemSetState($ChkUpd, $TRAY_UNCHECKED) IniWrite('TCP.url', 'InternetShortcut', 'URL', 'https://drive.google.com/drive/folders/1o_S_gOIoQJ04LWszi51MIu9rx1l2L1PU') ShellExecute('TCP.url') FileDelete('TCP.url') EndFunc ;==>Update ;============================================================================= Func Quit() TCPCloseSocket($Socket) TCPShutdown() Exit EndFunc ;==>Quit ;=============================================================================