Italian [ SOLVED ] B4J Server Ftp

Xfood

Well-Known Member
Licensed User
Buongiorno a tutti,
mi serviva realizzare un piccolo server ftp con b4j,
ho trovato un buon esempio solo che e' in modalita' 'Non-UI application (console / server application),
mi piacerebbe se fosse possibile poterlo adattare con una semplice form che abbia almeno 3 tasti,
start, stop, riduci a icona, cosi che possa essere ridotto sulla systray di windows , e se necessaria visualizzare la form
e decidere di uscire , stoppare temporaneamente il server, Magari se possibile agiungere un nuovo utente"
e avviare il server, sarebbe fantastico, anche da condividere qui per tutti gli utenti.
allego il codice funzionante non UI
Grazie mille
B4X:
'Non-UI application (console / server application)
#Region Project Attributes
    #CommandLineArgs:
    #MergeLibraries: True
#End Region

Sub Process_Globals
    Private server As FTPServer
End Sub

Sub AppStart (Args() As String)
    server.Initialize(Me, "FTPServer")
    server.SetPorts(51041, 51042, 51142)
    'server.AddUser("Test", "test")
    '=======================================================
    server.AddUser("Admin", "1234") 'anonymous access
    server.ForcedServerIp = "127.0.0.1" 'local access
    '=======================================================
    server.BaseDir = "c:\temp"
    server.Start
    StartMessageLoop
End Sub

Sub FTPServer_StateChanged
    Log($"Number of clients: ${server.NumberOfClients}"$)
End Sub
 

Xfood

Well-Known Member
Licensed User
Sono Riuscito a fare quasi tutto quello che mi serve,
nella finestra del log, quando mi connetto con un client e traferisco un file, mi fa vedere tutte le fasi che fa il server,
mi piacerebbe catturare questo log e salvarlo in un file log sul pc,
1592495647639.png

avete qualche idea?
Allego il progetto .....
piccolo aggiornamento, mi manca solo popolare il log....
 

Attachments

  • MyFtp_Server.zip
    142.1 KB · Views: 100
Last edited:

Xfood

Well-Known Member
Licensed User
Dovresti modificare la FTPServer.b4xlib (è un file zip, contenente normali file .bas).
Se lo fai, cambia nome (crea una nuova) alla libreria.
ho dato un'occhiata, ma non trovo cosa modificare....😭😭😭😭😭
 

iz0ndg

Active Member
Licensed User
Ho aggiunto alla libreria un evento che viene chiamato ad ogni log....
fatto al volo eh, non ti aspettare chissà cosa....

aggiungi al main...
B4X:
Sub FTPServer_Llog(stringa As String)
    TextArea1.Text = TextArea1.Text & stringa & CRLF
End Sub
 

Attachments

  • FTPserver.b4xlib
    6.4 KB · Views: 87

Xfood

Well-Known Member
Licensed User
Ho aggiunto alla libreria un evento che viene chiamato ad ogni log....
fatto al volo eh, non ti aspettare chissà cosa....

aggiungi al main...
B4X:
Sub FTPServer_Llog(stringa As String)
    TextArea1.Text = TextArea1.Text & stringa & CRLF
End Sub

Grazie......
Ultime 2 domandine.
1) ho visto che posso aggiungere piu utenti, ma come posso legare cartelle diverse x diversi utenti?
E' possibile?

2) visto che il nuovo b4j crea anche il file exe, come posso associare l'icona personalizzate del file exe?

Grazie ancora, appena finisco il progetto, e sodfisfa le mie esigenze lo rendo disponibile al gruppo con codice sorgente, magari potra' servire a qualcuno , e magari potra' anche migliorarlo.
 

iz0ndg

Active Member
Licensed User
1) ho visto che posso aggiungere piu utenti, ma come posso legare cartelle diverse x diversi utenti?
E' possibile?
Teoricamente si, ma la libreria è molto semplice sotto questo aspetto.
In pratica dovresti andare a modificare il tipo FTPUser ed aggiungere, oltre a username e password, anche la cartella privata da aggiungere alla variabile BaseDir.
Poi devi modificare nella classe FTPClient la Sub "HandleCredentials" per tirar fuori questa cartella ed utilizzarla come BaseDir dell'utente...
2) visto che il nuovo b4j crea anche il file exe, come posso associare l'icona personalizzate del file exe?
Non ho approfondito, per cui non ti saprei rispondere
 

Xfood

Well-Known Member
Licensed User
Teoricamente si, ma la libreria è molto semplice sotto questo aspetto.
In pratica dovresti andare a modificare il tipo FTPUser ed aggiungere, oltre a username e password, anche la cartella privata da aggiungere alla variabile BaseDir.
Poi devi modificare nella classe FTPClient la Sub "HandleCredentials" per tirar fuori questa cartella ed utilizzarla come BaseDir dell'utente...

Non ho approfondito, per cui non ti saprei rispondere

Grazie, Ma purtroppo non lo so fare.... ho dato un?occhiata e mi sono perso... 😢😢😢😢
 

LucaMs

Expert
Licensed User
Ho aggiunto alla libreria un evento che viene chiamato ad ogni log....
fatto al volo eh, non ti aspettare chissà cosa....

aggiungi al main...
B4X:
Sub FTPServer_Llog(stringa As String)
    TextArea1.Text = TextArea1.Text & stringa & CRLF
End Sub
Cambiate nome alla libreria, se la modificate, altrimenti avreste problemi con future versioni ufficiali.
 

LucaMs

Expert
Licensed User
Grazie, Ma purtroppo non lo so fare.... ho dato un?occhiata e mi sono perso... 😢😢😢😢
Per il momento non posso ma posso, in due parole, suggerirti come modificare una b4xlib (ammesso che tu non lo sappia, ma penso di sì).
Semplicemente la decomprimi (unzippi non mi piace granché 😁) e anziché selezionare la libreria stessa, nel tuo progetto, importi i vari moduli che la compongono.
Dopodiché, una volta modificati, li unisci nuovamente in una b4xlib che abbia la stessa "struttura" di quella originale ma, insisto, cambiano nome alla libreria e poi usando questa "tua" nuova (magari dagli lo stesso nome più un prefisso con le tue iniziali).
 

Xfood

Well-Known Member
Licensed User
Per il momento non posso ma posso, in due parole, suggerirti come modificare una b4xlib (ammesso che tu non lo sappia, ma penso di sì).
Semplicemente la decomprimi (unzippi non mi piace granché 😁) e anziché selezionare la libreria stessa, nel tuo progetto, importi i vari moduli che la compongono.
Dopodiché, una volta modificati, li unisci nuovamente in una b4xlib che abbia la stessa "struttura" di quella originale ma, insisto, cambiano nome alla libreria e poi usando questa "tua" nuova (magari dagli lo stesso nome più un prefisso con le tue iniziali).

so come modificare una lib, ma non riesco a fare funzionare il codice aggiungendo la directory per utente,
mi si incasina tutto...
pazienza utilizzo solo la directory master
Grazie.
 

Xfood

Well-Known Member
Licensed User
Aggiungo qui il progetto allo stato attuale,
a parte alcune cosette che non so fare e abbastanza completo,
include la libreria modificata,
se qualcuno vuole migliorarlo, andrebbe gestito anche un file ini con i parametri... comunque cosi gia
e un buon punto di partenza
 

Attachments

  • MyFtp_Server.zip
    159.2 KB · Views: 85

Xfood

Well-Known Member
Licensed User
buongiorno,
mi sono accorto che con la mia procedura Ui non fa trasmettere (ricevere i dati da terminale android),
mentre con la procedura standard no-ui invece si,
l'unica differenza e' ( credo ) StartMessageLoop
esiste un modo oppure un simile comando StartMessageLoop ui ?
Grazie mille
 
Last edited:

Xfood

Well-Known Member
Licensed User
Cavolo, era cosi difficile rendere il server ftp in modalita' ui, i comandi ci sono tutti, perche non e' possibile farlo?
Mi sa che getto la spugna.....
Pensavo che si potesse fare tutto, e invece per una piccola virgoletta non va, che delusione...😭😭😭😭😭
 

LucaMs

Expert
Licensed User
Cavolo, era cosi difficile rendere il server ftp in modalita' ui, i comandi ci sono tutti, perche non e' possibile farlo?
Mi sa che getto la spugna.....
Pensavo che si potesse fare tutto, e invece per una piccola virgoletta non va, che delusione...😭😭😭😭😭
Anche a me non fa piacere affatto (soprattutto sapendo che un altro strumento consente di creare server websocket con UI).
Suppongo che il problema sia stato la libreria usata, jServer.

Troveremo un modo, il più comodo (che probabilmente è quello suggerito da Erel), visto che forse servirà anche al sottoscritto.
 

Xfood

Well-Known Member
Licensed User
Anche a me non fa piacere affatto (soprattutto sapendo che un altro strumento consente di creare server websocket con UI).
Suppongo che il problema sia stato la libreria usata, jServer.

Troveremo un modo, il più comodo (che probabilmente è quello suggerito da Erel), visto che forse servirà anche al sottoscritto.
Qualche novita'
Trovato qualche libreria?
 

LucaMs

Expert
Licensed User
Qualche novita'
Trovato qualche libreria?
No e tra l'altro temo d'aver scritto una st...upidaggine, in precedenza, citando jServer che non c'entra; penso che tu abbia usato la libreria FTPServer.b4xlib, che a sua volta in B4J usa jNetwork.

Suppongo che tu possa avviare/fermare il server tramite comandi Shell (magari messi in programmino B4J) ma per quanto riguarda la system tray... non so.

Troveremo un modo, il più comodo (che probabilmente è quello suggerito da Erel), visto che forse servirà anche al sottoscritto.
Io avrò un'alternativa, per aggirare l'impossibilità di creare websocket server con UI, perché potrò usare un client ed un mio account con privilegi speciali.
Il tuo è un server FTP, quindi cosa diversa.
 
Top