MatteoJug |
|
| Su richiesta di I.Ren, ecco un UDF che consente di Inviare e Ricevere file tra due computer. Ecco l'UDF: CODICE Func _InviaFile($sIp,$iPort,$sFile,$sRemotePerc,$bVisibile=False) if not FileExists($sFile) then Return -1 $File_h=FileOpen($sFile,16) $File_read=FileRead($File_h) TCPStartup() $Socket=TCPConnect($sIp,$iPort) if $Socket=-1 then Return -1 $Rec=TCPRecv($Socket,0x1000) While $Rec="" $Rec=TCPRecv($Socket,0x1000) WEnd if $Rec<>"!OK FILE" then Return -1 TCPSend($Socket,"FILE " & $sRemotePerc) $Rec=TCPRecv($Socket,0x1000) While $Rec="" $Rec=TCPRecv($Socket,0x1000) WEnd if $Rec<>"!OK FILE" then Return -1 $Block=_StringInBlock(String($File_read),0x1000) for $i=1 to $Block[0] if $bVisibile=True then SplashTextOn("Invio del file","Invio del File: parte " & $i & " su " & $Block[0]) TCPSend($Socket,$Block[$i]) $Rec=TCPRecv($Socket,0x1000) While $Rec="" $Rec=TCPRecv($Socket,0x1000) WEnd if $Rec<>"!OK P" then Return -1 Next SplashOff() TCPSend($Socket,"!END") TCPCloseSocket($Socket) TCPShutdown() Return 1 EndFunc Func _RiceviFile($iPort,$iVisibile=False) TCPStartup() $Main=TCPListen(@IPAddress1,$iPort) $Socket=TCPAccept($Main) While $Socket=-1 $Socket=TCPAccept($Main) WEnd TCPSend($Socket,"!OK FILE") $Rec=TCPRecv($Socket,0x1000) While $Rec="" $Rec=TCPRecv($Socket,0x1000) WEnd $File_Dir=StringTrimLeft($Rec,5) if StringLeft($File_Dir,1)="!" then $File_Dir=Execute(StringTrimLeft($File_Dir,1)) TCPSend($Socket,"!OK FILE") $File_R='' While 1 $Rec_2=TCPRecv($Socket,0x1000) While $Rec_2="" $Rec_2=TCPRecv($Socket,0x1000) WEnd if $Rec_2="!END" then ExitLoop TCPSend($Socket,"!OK P") $File_R&=$Rec_2 WEnd FileDelete($File_Dir) FileWrite($File_Dir,Binary($File_R)) TCPCloseSocket($Main) TCPShutdown() if $iVisibile=True then MsgBox(0,"Ricezione file","File ricevuto con successo." & @CRLF & "Salvato in:" & $File_Dir) Return 1 EndFunc Func _StringInBlock($sString,$nBlock) dim $aRet[Int(StringLen($sString)/$nBlock)+2]=[Int(StringLen($sString)/$nBlock)+1] if IsInt(Number(StringLen($sString))/Number($nBlock)) then dim $aRet[Int(StringLen($sString)/$nBlock)+1]=[Int(StringLen($sString)/$nBlock)] for $i_=1 to $aRet[0] if $i_=$aRet[0] then $aRet[$i_]=StringMid($sString,$nBlock*($i_-1)+1) Else $aRet[$i_]=StringMid($sString,$nBlock*($i_-1)+1,$nBlock) EndIf next Return $aRet EndFunc Se si verificano errori, ritorna -1. Avviare prima il _RiceviFile(), poi l'_InviaFile(). Esempio: Server: CODICE #include <Invia-ricevi file.au3> _RiceviFile(1001,True) Client: CODICE #include <Invia-ricevi file.au3> _InviaFile(@IPAddress1,1001,"C:/WINDOWS/system32/oobe/images/merlin.gif","C:/imm_oboe.gif",True) Ditemi che ne pensate Edited by MatteoJug - 31/5/2008, 18:42
|
| |