everything iS nOw!
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.


Ogni Cosa, Dovunque!
 
IndiceUltime immaginiCercaRegistratiAccedi

 

 [AutoIt] Inviare file tramite TCP-UDP.

Andare in basso 
3 partecipanti
AutoreMessaggio
speed
Admin
Admin
speed


Maschio Messaggi : 418
Occupazione/Hobby : Studente di Informatica

[AutoIt] Inviare file tramite TCP-UDP. Empty
MessaggioTitolo: [AutoIt] Inviare file tramite TCP-UDP.   [AutoIt] Inviare file tramite TCP-UDP. Icon_minitime8/3/2011, 8:03 pm

come da titolo, come si fa?
c'è qualche comando o qualche macro da aggiungere allo script?

ciao ciao! Wink
Torna in alto Andare in basso
HiroPirat
Esperto
Esperto
HiroPirat


Maschio Messaggi : 182
Occupazione/Hobby : un po' di tutto

[AutoIt] Inviare file tramite TCP-UDP. Empty
MessaggioTitolo: Re: [AutoIt] Inviare file tramite TCP-UDP.   [AutoIt] Inviare file tramite TCP-UDP. Icon_minitime9/3/2011, 12:55 pm

Prima di tutto bisogna avviare il server socket, credo
Torna in alto Andare in basso
speed
Admin
Admin
speed


Maschio Messaggi : 418
Occupazione/Hobby : Studente di Informatica

[AutoIt] Inviare file tramite TCP-UDP. Empty
MessaggioTitolo: Re: [AutoIt] Inviare file tramite TCP-UDP.   [AutoIt] Inviare file tramite TCP-UDP. Icon_minitime9/3/2011, 12:59 pm

allora, vi posto il mio codice, spero che a qualcuno possa essere utile e possa eventualmente aiutarmi:

per il client:
Codice:
#include <_TCPFileTransfer.au3>
#include <File.au3>

TCPStartup()
$socket = TCPConnect(@IPAddress1, 666)
If $socket <> -1 Then
   $identify = @UserName & "-" & @IPAddress1
   TCPSend($socket, $identify)
Else
   MsgBox(0, "Errore nr: ", @error)
EndIf

While 1
$file = TCPRecv($socket, 2048)
MsgBox(0, "ecco il relativo codice:", $file)
FileWrite("prova.txt", $file)
WEnd

per il server:
Codice:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <INet.au3>

; genera il form con tutti i suoi controlli;

$Form1 = GUICreate("Accesso remoto!", 370, 450, 192, 124)
$pdc = GUICtrlCreateLabel("Pannello di Controllo - Connesso a: NESSUNO [IP INS'T DEFINED].", 24, 16, 326, 17)
$attdisatt = GUICtrlCreateButton("Apri il lancia comandi (on)", 24, 56, 150, 33)
$pdm = GUICtrlCreateList("", 24, 112, 321, 273)
GUICtrlSetData(-1, "Disattivo!")
GUICtrlSetState(-1, $GUI_DISABLE)
$chiusura = GUICtrlCreateButton("Termina la sessione.", 184, 400, 161, 33)
GUISetState(@SW_SHOW)

   TCPStartup()   ; attivo il servizio TCP
   $ascolto = TCPListen(@IPAddress1, 666)   ; mi metto in ascolto sulla porta 666 dell'ip locale

While 666
   
   $socket = TCPAccept($ascolto)   ; attendo che il client si connetta
   
   If $socket <> -1 Then   ; quando il client è connesso
         $ricvo = TCPRecv($socket, 32)   ; ricevo la stringa (nome utente e indirizzo ip)
         $ricv = StringStripWS($ricvo, 1+2)
         $arrayricv = StringSplit($ricv, "-")
         $nomeutente = $arrayricv[1]
         $indirizzoip = $arrayricv[2]
         $indirizzopubblico = _GetIP()
         GUICtrlSetData($pdc, "Pannello di Controllo - Connesso a: " & $nomeutente & " [" & $indirizzopubblico & "].") ; ...e imposto i dati ricevuti
         $binaryfile = FileOpen("dati.txt",16)
         MsgBox(0, "", $binaryfile)
         TCPSend($socket,$binaryfile)
   EndIf
   
   $nMsg = GUIGetMsg()
   
   Switch $nMsg
      
      Case $GUI_EVENT_CLOSE
         Exit
      Case $chiusura
         Exit
      Case $attdisatt
         GUICtrlSetState($pdm, $GUI_ENABLE)
         GUICtrlSetData($attdisatt, "Chiudi il lancia comandi (off)")

   EndSwitch
WEnd
Torna in alto Andare in basso
speed
Admin
Admin
speed


Maschio Messaggi : 418
Occupazione/Hobby : Studente di Informatica

[AutoIt] Inviare file tramite TCP-UDP. Empty
MessaggioTitolo: Re: [AutoIt] Inviare file tramite TCP-UDP.   [AutoIt] Inviare file tramite TCP-UDP. Icon_minitime9/3/2011, 4:11 pm

ho letto che si può fare in due modi: occorre o una libreria o convertire il file in formato binario?
quale dei due è il migliore? come si realizza?

grazie mille! rabbit
Torna in alto Andare in basso
Sadga
Moderatore
Moderatore
Sadga


Maschio Messaggi : 94

[AutoIt] Inviare file tramite TCP-UDP. Empty
MessaggioTitolo: Re: [AutoIt] Inviare file tramite TCP-UDP.   [AutoIt] Inviare file tramite TCP-UDP. Icon_minitime9/3/2011, 4:14 pm

Per prima cosa il server e il client sono invertiti
cioè quello che tu chiami client in realtà è il server e viceversa
Comunque nei meandri del computer ho trovato questo:
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
sono delle funzioni per inviare e ricevere file ma non sò come funzionano
le ho scaricate da internet ma non ricordo dove...

Saluti By king
Torna in alto Andare in basso
speed
Admin
Admin
speed


Maschio Messaggi : 418
Occupazione/Hobby : Studente di Informatica

[AutoIt] Inviare file tramite TCP-UDP. Empty
MessaggioTitolo: Re: [AutoIt] Inviare file tramite TCP-UDP.   [AutoIt] Inviare file tramite TCP-UDP. Icon_minitime14/3/2011, 7:26 pm

ottimo, io volevo aggiungere invece un ulteriore esempio che ho trovato sul web.
questo file va creato come sorgente (.au3) e chiamato "_TCPFileTransfer", quindi _TCPFileTransfer.au3

inseritelo nella vostra cartella contenente i files da includere "C:\Programmi\AutoIt3\Include":

ora è pronto per essere usato, aggiungendo l'istruzione
Codice:
#include <_TCPFileTransfer.au3>

ecco il codice sorgente della "libreria"

Codice:
#include <WinAPI.au3>
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.0
 Author:        DELmE

 Function:
    _TCPFileRecv

Description:
    Receives a file being sent over a TCP connection

Parameters:
   sock            The TCP socket to be used
    rFile               The name of the file to save to
   offset = 0         The offset to start writing data to the file at (to be used if the transfer is somehow interrupted) default value is 0 (no offset)
   $DataSize = 1024   The number of bytes of data to be received per packet, default value is 1024

Return value:
    Success    _TCPFileRecv returns the number of bytes written to the file
    Failure    _TCPFileRecv returns 0 if the function failed and sets @error to the following:
      1 = Error opening the file
      2 = Failed to set offset
      3 = Failed to receive data on socket (invalid socket)
      4 = Unable to write data to the file
      Also sets @extended to the number of bytes of data that was successfully written to the file

#ce ----------------------------------------------------------------------------
Func _TCPFileRecv($sock, $rFile, $offset = 0, $DataSize = 1024)
   Local $i, $x, $lpszBuff, $nBytes, $rBuff, $hFile
   $nBytes = 0
   $lpszBuff = DllStructCreate("byte["&$DataSize&"]")
   $hFile = _WinAPI_CreateFile($rFile,3,4,4)
   If $hFile = 0 Then
      _WinAPI_CloseHandle($hFile)
      SetError(1)
      SetExtended($nBytes)
      Return 0
   EndIf
   While 1
      If _WinAPI_SetFilePointer($hFile, $offset, 0) = -1 Then
         _WinAPI_CloseHandle($hFile)
         SetError(2)
         SetExtended($nBytes)
         Return 0
      EndIf
      $rBuff = ""
      $rBuff = TCPRecv($sock, $DataSize)
      If $rBuff <> "" Then
         If @error = -1 Then
            _WinAPI_CloseHandle($hFile)
            SetError(3)
            SetExtended($nBytes)
            Return 0
         EndIf
         If $rBuff = @CRLF&@CRLF Then
            ExitLoop
         Else
            DllStructSetData($lpszBuff, 1, $rBuff)
            $x = StringLen(BinaryToString($rBuff))
            If _WinAPI_WriteFile($hFile, DllStructGetPtr($lpszBuff), $x, $i) = False Then
               _WinAPI_CloseHandle($hFile)
               SetError(4)
               SetExtended($nBytes)
               Return 0
            Else
               $nBytes += $i
               $offset += $i
            EndIf
         EndIf
      EndIf
   WEnd
   _WinAPI_CloseHandle($hFile)
   SetExtended($nBytes)
   Return $nBytes
EndFunc ;==> _TCPFileRecv

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.0
 Author:        DELmE

 Function:
    _TCPFileSend

Description:
    Sends a file over a TCP connection

Parameters:
   sock            The tcp socket to be used
    sFile               The file to be sent
   offset = 0         The offset to start reading data from the file at (to be used if the transfer is somehow interrupted) default value is 0 (no offset)
   $DataSize = 1024   The number of bytes of data to be sent per packet, default value is 1024

Return value:
    Success    _TCPFileSend returns the number of bytes sent
    Failure    _TCPFileSend returns 0 if an error occurred and sets @error to the following:
      1 = The file does not exist
      2 = Failed to set offset
      3 = Failed to read data from file
      4 = Failed to send data through socket
      Also sets @extended to the number of bytes of data that was successfully sent

#ce ----------------------------------------------------------------------------
Func _TCPFileSend($sock, $sFile, $offset = 0, $DataSize = 1024)
   Local $i, $lpszBuff, $nBytes, $sBuff, $hFile, $nFileSize
   $nFileSize = FileGetSize($sFile)
   $nFileSize -= $offset
   If $nFileSize < $DataSize Then $DataSize = $nFileSize
   $nBytes = 0
   $lpszBuff = DllStructCreate("byte["&$DataSize&"]")
   $hFile = _WinAPI_CreateFile($sFile,2,2,2)
   If $hFile = 0 Then
      _WinAPI_CloseHandle($hFile)
      SetError(1)
      SetExtended($nBytes)
      Return 0
   EndIf
   While $nFileSize > 0
      If _WinAPI_SetFilePointer($hFile, $offset, 0) = -1 Then
         _WinAPI_CloseHandle($hFile)
         SetError(2)
         SetExtended($nBytes)
         Return 0
      EndIf
      DllStructSetData($lpszBuff,1,"")
      If _WinAPI_ReadFile($hFile, DllStructGetPtr($lpszBuff), $DataSize, $i) = False Then
         _WinAPI_CloseHandle($hFile)
         SetError(3)
         Return 0
      Else
         $sBuff = DllStructGetData($lpszBuff, 1)
         $i = TCPSend($sock, $sBuff)
         If $i = 0 Then
            _WinAPI_CloseHandle($hFile)
            SetError(4)
            SetExtended($nBytes)
            Return 0
         Else
            $nBytes += $i
            $offset += $i
            $nFileSize -= $i
         EndIf
      EndIf
   WEnd
   _WinAPI_CloseHandle($hFile)
   TCPSend($sock, @CRLF&@CRLF)
   SetExtended($nBytes)
   Return $nBytes
EndFunc ;==> _TCPFileSend

infine, per spedire usate _TCPFileSend(il vostro socket, il percorso del file e il file, spiazzamento = 0 (opzionale), $grandezzadeidati = 1024 (bytes per volta [opzionale])), mentre per ricevere _TCPFileRecv(il vostro socket, il percorso del file e il nome del file, $offset = 0, spiazzamento = 0 (opzionale), $grandezzadeidati = 1024 (opzionale)).

ciao ciao! Smile
Torna in alto Andare in basso
Contenuto sponsorizzato





[AutoIt] Inviare file tramite TCP-UDP. Empty
MessaggioTitolo: Re: [AutoIt] Inviare file tramite TCP-UDP.   [AutoIt] Inviare file tramite TCP-UDP. Icon_minitime

Torna in alto Andare in basso
 
[AutoIt] Inviare file tramite TCP-UDP.
Torna in alto 
Pagina 1 di 1
 Argomenti simili
-
» [AutoIt]Problema con Gui
» come cancellare il file di un programma in esecuzione.
» [Autoit]Calcolatore codice fiscale
» [AutoIt] Gestire più finestre simultaneamente.
» [AutoIt] Più client, singolo server.

Permessi in questa sezione del forum:Non puoi rispondere agli argomenti in questo forum.
everything iS nOw! :: Interessi :: Informatica :: Programmazione-
Vai verso: