Italian [B4A] tasferire file da android a pc Tcp/ip

Xfood

Expert
Licensed User
Buongiorno a tutti,
Dopo il grande successo di questo mio precedente post


Ho deciso di aprirne un'altro,
Ho una cartella sul mio pc ,
c:\ordine condivisa,
Come faccio dal mio terminale android in B4A a copiare un file dentro questa cartella.
Il terminale e' in Wifi con la stessa rete.
Mi serve un semplice
copy \\192.168.1.100\ordine\ordine.out
Qualche idea?
Grazie Anticipatamente
 

Star-Dust

Expert
Licensed User
Longtime User
Da una parte server FTP e dall'altra client ftp
 

Star-Dust

Expert
Licensed User
Longtime User
Devi comunque fare un server, FTP, mttq, http o uno proprietario.. comunque ci vuole un server e un client.

Tranne che usi samba (SMB) per condividere file col sistema di condivisione di Windows
 

Xfood

Expert
Licensed User
Devi comunque fare un server, FTP, mttq, http o uno proprietario.. comunque ci vuole un server e un client.

Tranne che usi samba (SMB) per condividere file col sistema di condivisione di Windows
SMB mi piace, qualche esempio.
 

Star-Dust

Expert
Licensed User
Longtime User
Metti nella barra di ricerca SMB2 e trovi la libreria e l'esempio. Comunque non è semplicissimo
 

Star-Dust

Expert
Licensed User
Longtime User
SMB è una libreria di Erel, mentre SMB2 di DonManfred
 

amorosik

Expert
Licensed User
Volevo evitare il server ftp....🙃

Possiamo sapere i motivi?
Reputo lo scambio dati via ftp una delle cose piu' semplici ed affidabili a tutti livelli
- esistono client e server ftp per TUTTI gli ambienti e sitemi operativi
- e' uno standard ben collaudato e documentato e quindi robusto ed affidabile
- e' estremamente semplice attivare un server ftp su qualsiasi macchina, e provare a collegarcisi da un client qualsiasi e' davvero questione di minuti

Cosa trovi in altri protocolli di cosi' sexy da attrarti piu' dell'ftp?
 

udg

Expert
Licensed User
Longtime User
Se vuoi divertirti ad inventarti una tua strada, potresti prendere spunto da un esempio di Erel dove due device comunicavano tra loro tramite socket e stream.
In pratica, una volta "scoperti" gli indirizzi di rete di entrambi i device, potresti aprire un socket, inviare dati di controllo (es. nome file, lunghezza, hash..) e poi dati grezzi (i byte che costituiscono il file). La parte ricevente dovrebbe "ricostruire" il file spedito e salvarlo in locale dove preferisce (o dove sia stato indicato dai comandi precedenti).

Mi riferisco a questo, e se vuoi ispirazione per il trasferimento file guarda anche un suo vecchio predecessore.
 

Xfood

Expert
Licensed User
Se vuoi divertirti ad inventarti una tua strada, potresti prendere spunto da un esempio di Erel dove due device comunicavano tra loro tramite socket e stream.
In pratica, una volta "scoperti" gli indirizzi di rete di entrambi i device, potresti aprire un socket, inviare dati di controllo (es. nome file, lunghezza, hash..) e poi dati grezzi (i byte che costituiscono il file). La parte ricevente dovrebbe "ricostruire" il file spedito e salvarlo in locale dove preferisce (o dove sia stato indicato dai comandi precedenti).

Mi riferisco a questo, e se vuoi ispirazione per il trasferimento file guarda anche un suo vecchio predecessore.
Provo a studiare un po
 
Last edited:

Xfood

Expert
Licensed User
provato con SMB2 e tutto funziona abbastanza facilmente
piccolo riassunto per quello che ho fatto
magari puo servire a qualcuno



la libreia l'ho presa da qui





B4X:
#AdditionalJar: slf4j-api-1.7.25.jar
#AdditionalJar: bctls-jdk15on-1.58.0.0.jar
#AdditionalJar: bcprov-jdk15on-1.59.jar


Sub Class_Globals
Public smbClient As SMBClient
Public glRes, github As SMBResource
End Sub

Private Sub BtnTrasmetti_Click
Dim cPathFileOut as string
Dim cPathOut as string
      cPathFileOut=File.DirDefaultExternal
      cPathOut= "ORDINE.OUT"
                                          ' dominio,Utente,Password,RisorsaPc_Condivisa
    smbClient.Initialize("smbClient_Copy", "", "Utente","Password", "smb://192.168.1.17/c-drive/FTP/")
    Wait For smbClient_Copy_Resource(success As Boolean, smbobjres As Object,smbobj As Object, info As String)
    If smbobjres <> Null And smbobj <> Null And info = "OK" Then
        Dim smbResource As SMBResource = smbobjres
                    
        smbClient.Copy2(cPathFileOut,cPathOut,smbResource, cPathOut)
        Wait For smbclient_copy_copyresult(success As Boolean, path As String, filename As String)
            'Wait For smbClient_Copy_Copy2Result(success As Boolean, path As String, filename As String)
            If success = False Then
                'bB = False
                Log("ERRORE COPIA")
            Else
                Log("copia ok")
            End If
            Sleep(0)
    End If
End Sub   

Sub smbclient_copy_copyprogress(totalBytes As Long, path As String, filename As String)
    Log($"SMBClient_CopyProgress(${totalBytes} : ${path}:${filename})"$)
End Sub

Sub SMBClient_CopyResult(success As Boolean, path As String, filename As String)
    Log($"SMBClient_CopyResult(${success})"$)
    Return success
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
provato con SMB2 e tutto funziona abbastanza facilmente
piccolo riassunto per quello che ho fatto
magari puo servire a qualcuno



la libreia l'ho presa da qui





B4X:
#AdditionalJar: slf4j-api-1.7.25.jar
#AdditionalJar: bctls-jdk15on-1.58.0.0.jar
#AdditionalJar: bcprov-jdk15on-1.59.jar


Sub Class_Globals
Public smbClient As SMBClient
Public glRes, github As SMBResource
End Sub

Private Sub BtnTrasmetti_Click
Dim cPathFileOut as string
Dim cPathOut as string
      cPathFileOut=File.DirDefaultExternal
      cPathOut= "ORDINE.OUT"
                                          ' dominio,Utente,Password,RisorsaPc_Condivisa
    smbClient.Initialize("smbClient_Copy", "", "Utente","Password", "smb://192.168.1.17/c-drive/FTP/")
    Wait For smbClient_Copy_Resource(success As Boolean, smbobjres As Object,smbobj As Object, info As String)
    If smbobjres <> Null And smbobj <> Null And info = "OK" Then
        Dim smbResource As SMBResource = smbobjres
                  
        smbClient.Copy2(cPathFileOut,cPathOut,smbResource, cPathOut)
        Wait For smbclient_copy_copyresult(success As Boolean, path As String, filename As String)
            'Wait For smbClient_Copy_Copy2Result(success As Boolean, path As String, filename As String)
            If success = False Then
                'bB = False
                Log("ERRORE COPIA")
            Else
                Log("copia ok")
            End If
            Sleep(0)
    End If
End Sub 

Sub smbclient_copy_copyprogress(totalBytes As Long, path As String, filename As String)
    Log($"SMBClient_CopyProgress(${totalBytes} : ${path}:${filename})"$)
End Sub

Sub SMBClient_CopyResult(success As Boolean, path As String, filename As String)
    Log($"SMBClient_CopyResult(${success})"$)
    Return success
End Sub
Ottimo lavoro @Xfood 👍
 

Xfood

Expert
Licensed User
provato con SMB2 e tutto funziona abbastanza facilmente
piccolo riassunto per quello che ho fatto
magari puo servire a qualcuno



la libreia l'ho presa da qui





B4X:
#AdditionalJar: slf4j-api-1.7.25.jar
#AdditionalJar: bctls-jdk15on-1.58.0.0.jar
#AdditionalJar: bcprov-jdk15on-1.59.jar


Sub Class_Globals
Public smbClient As SMBClient
Public glRes, github As SMBResource
End Sub

Private Sub BtnTrasmetti_Click
Dim cPathFileOut as string
Dim cPathOut as string
      cPathFileOut=File.DirDefaultExternal
      cPathOut= "ORDINE.OUT"
                                          ' dominio,Utente,Password,RisorsaPc_Condivisa
    smbClient.Initialize("smbClient_Copy", "", "Utente","Password", "smb://192.168.1.17/c-drive/FTP/")
    Wait For smbClient_Copy_Resource(success As Boolean, smbobjres As Object,smbobj As Object, info As String)
    If smbobjres <> Null And smbobj <> Null And info = "OK" Then
        Dim smbResource As SMBResource = smbobjres
                   
        smbClient.Copy2(cPathFileOut,cPathOut,smbResource, cPathOut)
        Wait For smbclient_copy_copyresult(success As Boolean, path As String, filename As String)
            'Wait For smbClient_Copy_Copy2Result(success As Boolean, path As String, filename As String)
            If success = False Then
                'bB = False
                Log("ERRORE COPIA")
            Else
                Log("copia ok")
            End If
            Sleep(0)
    End If
End Sub  

Sub smbclient_copy_copyprogress(totalBytes As Long, path As String, filename As String)
    Log($"SMBClient_CopyProgress(${totalBytes} : ${path}:${filename})"$)
End Sub

Sub SMBClient_CopyResult(success As Boolean, path As String, filename As String)
    Log($"SMBClient_CopyResult(${success})"$)
    Return success
End Sub
Buon Pomeriggio a tutti,
come ho scritto sopra smb funziona benissimo,
riesco ad inviare i file dal device android alla cartella condivisa su pc

non riesco a fare al contrario, cioe' prendere un file dalla cartella condivisa dal pc e trasferirlo sul device android
qualcumo potrebbe darmi qualche dritta per favore.
Grazie
 

Star-Dust

Expert
Licensed User
Longtime User
Devi prelevarlo dal lato android
 

Xfood

Expert
Licensed User
si, vorrei poter copiare un file che si trova sul mio pc esempio c:\parametri\configurazione.ini
e copiarlo nel terminale in File.DirDefaultExternal
in pratica ho 2 bottoni sul terminale android, 1 esporta configurazione ( tutto ok)
2 importa configurazione ( non riesco a copiarlo dal pc al terminale )
 

Star-Dust

Expert
Licensed User
Longtime User
prova con File.DirDefaultInternal
 

Xfood

Expert
Licensed User
il problema che incontro e' questo,


B4X:
smbClient.Copy2(cPathFileOut,cPathOut,smbResource, cPathOut)

'cosi copio dal terminale al pc ok quindi
      cPathFileOut=File.DirDefaultExternal
      cPathOut= "SETUP.INI"
      smbResource =(Dim smbResource As SMBResource = smbobjres) ' un oggetto che viene inizializzato'
      cPathOut=( sempre SETUP.INI)
' adesso pensavo di dover sostituire i parametri cosi: ( ma non funziona)'     
smbClient.Copy2(smbResource, cPathOut,cPathFileOut,cPathOut)
 

Star-Dust

Expert
Licensed User
Longtime User
il problema che incontro e' questo,


B4X:
smbClient.Copy2(cPathFileOut,cPathOut,smbResource, cPathOut)

'cosi copio dal terminale al pc ok quindi
      cPathFileOut=File.DirDefaultExternal
      cPathOut= "SETUP.INI"
      smbResource =(Dim smbResource As SMBResource = smbobjres) ' un oggetto che viene inizializzato'
      cPathOut=( sempre SETUP.INI)
' adesso pensavo di dover sostituire i parametri cosi: ( ma non funziona)'  
smbClient.Copy2(smbResource, cPathOut,cPathFileOut,cPathOut)
Adesso non posso vedere. Ma guarda il sorgente di esempio che c'è sul thread della libreria. Il con quello facevo tutto

Adesso sono anni che non lo uso più, era per un cliente che non ho piu.
Gli facevo apparire i file sul Desktop cosi non si scordava di aprirli
 
Top