Italian [ SOLVED ] B4J Server Ftp

udg

Expert
Licensed User
Longtime User
Purtroppo quei pochi che ho sono tutti complessi ed utilizzano un mio sistema alternativo a jRDC2 (lo avevo "inventato" prima che Erel pubblicasse il suo standard e per pigrizia ho continuatoa d utilizzare quello).
Quello che ti serve è l'esempio base. Giusto per avere un'idea, nella sub AppStart (del progetto B4J/jServer) ho qualcos atipo:
B4X:
'test per upload files
    File.MakeDir(File.DirApp, "uploaded")
    srvr.AddHandler("/upload", "hupload", False)

    srvr.Start
    StartMessageLoop
che (per test) crea la dir uploaded (sul server) senza neanche guardare se per caso esiste ed aggiunge l'handler che hai visto prima.
 

Xfood

Expert
Licensed User
Rileggevo ora un tuo post precedente. Hai il problema del StartMessageLoop per l'app UI da mettere sul PC.
Potresti organoizzarti cosi:
- x terminali Android che catturano dati ed inviano file del tipo termoxx.txt al server
- 1 server (no-UI) che riceve sia i file txt che i comandi (v. oltre)
- 1 sw PC/Android (UI) che invia comandi al server

I comandi potranno essere di ogni genere. Da attiva/disattiva a mandami delle statistiche.
E possono scambiarsi dati, sapere se e attivo, log ecc. In base al mio esempio allegato qui, come potrei utilizzare la tua idea?
Potresti gentilmente postare un esempio sempre in b4j?
Grazie..... ( speriamo di rosolvete) pensavo fosse piu semplice, c'era una bella lib server ftp, facile da implementare, e poi si "Casca" su una cosa "Banale" la GUI....?
 

udg

Expert
Licensed User
Longtime User
Se ti va bene l'idea di un controller terzo che invia comandi, allora puoi anche riprendere il discorso FTP invece che PostFile.

Nell'handler "hupload" di cui sopra, nella, Case "text" gestisci i singoli comandi (es. "avvia", "ferma").
Ovviamente nulla impedisce di avere un handler separato solo per la gestioen comandi..

Per sapere se il server è attivo, io preferisco avere un secondo handler "hHello" (da chiamare con http://<indirizo:porta/hello) ed il cui codice potrebbe essere:
B4X:
'Handler class
Sub Class_Globals
End Sub

Public Sub Initialize
End Sub

Sub Handle(req As ServletRequest, resp As ServletResponse)
    resp.CharacterEncoding="UTF-8"
    Main.HURL=req.FullRequestURI
    Dim i As Int =Main.HURL.LastIndexOf("/hello2")
    Main.Hurl=Main.HURL.SubString2(0,i)
    resp.Write(Main.hurl)
End Sub
Prima di una trasmissione da terminale Android chiami questo handler per sapere se il server è in ascolto. Più che la stringa di risposta ti interessa vedere se restituisce errore (fondamentalmente timeout)
 

LucaMs

Expert
Licensed User
Longtime User
- 1 sw PC/Android (UI) che invia comandi al server
Il punto è proprio (e solo) questo: creare un sw b4j che comunichi col suo server FTP b4j.

Non vorrebbe (perlomeno non chiedeva) che questo sw facesse chissà cosa, anzi non lo vorrebbe proprio, gli basterebbe un pannello che gli consentisse di avviare/fermare il server FTP (magari ne consentisse di controllare lo stato) e poter posizionare la cosa sulla barra delle applicazioni.

Per avviare il sw server ci sarebbe la libreria jShell, ma per il resto... non ne ho idea.

Direi che ci sono due possibili soluzioni:
1)
cavolo, puo essere che tutti i servizi sono NO-UI?
Help @Erel
Apri un thread con un titolo tipo:
"B4X FTP server b4xlib"
e nel primo post:
"How to use it in a B4J UI project?"

2) usare VB Net o C#
Ho appena trovato questo (quindi non ho nemmeno provato a scaricarlo):
https://www.codeproject.com/Articles/43125/Advanced-FTP-Server
E' possibile che sul Web ce ne siano altri.


P.S. non avevo visto che c'era una terza pagina in questo thread; quindi leggerò i post tra poco.
 

LucaMs

Expert
Licensed User
Longtime User
@udg, gli stai confondendo le idee 😄. Specifica che i tuoi post #41 e #44 sono relativi ad un server a sé stante, niente a che vedere col suo FTP (insomma, non farebbero parte di un eventuale sw di controllo del suo server FTP).

Anzi, non specificarlo: l'ho appena fatto, hehehe
 

LucaMs

Expert
Licensed User
Longtime User
Cosa vuol dire essere vecchi e sragionare!

Ho iniziato un progetto B4J che fa da server FTP e server WEB (websocket). Funziona e bene ma, piccolo particolare, poi mi sono messo a sviluppare un client che si connettesse al server WEB in modo che questo "pilotasse" il server FTP. Bene, ma perché l'ho fatto per Android?!?!?! Per il motivo di cui al primo paragrafo 😄.

Cmq, si può fare (ora non so se, già che ci sono, completo l'app. Meglio di no; piuttosto dovrei fare un'app di prova che sia un client FTP, ma prima ancora il client WEB b4j che faccia da interfaccia grafica al server FTP, visto che questo era lo scopo!).
 

Xfood

Expert
Licensed User
Cosa vuol dire essere vecchi e sragionare!

Ho iniziato un progetto B4J che fa da server FTP e server WEB (websocket). Funziona e bene ma, piccolo particolare, poi mi sono messo a sviluppare un client che si connettesse al server WEB in modo che questo "pilotasse" il server FTP. Bene, ma perché l'ho fatto per Android?!?!?! Per il motivo di cui al primo paragrafo 😄.

Cmq, si può fare (ora non so se, già che ci sono, completo l'app. Meglio di no; piuttosto dovrei fare un'app di prova che sia un client FTP, ma prima ancora il client WEB b4j che faccia da interfaccia grafica al server FTP, visto che questo era lo scopo!).
E poi la condividi qui😜😜😜😜
Grandeee.....
 

LucaMs

Expert
Licensed User
Longtime User
E poi la condividi qui😜😜😜😜
Grandeee.....
Mi ci stavo impiccando fino a poco fa.

Problemino: il web server è impostato per la "sicurezza" e tramite app android accedo tranquillamente (indirizzo wss://...). Il client B4J per ora non riesce a connettersi con questa "modalità".

Ma per ora mollo, rischio i due unici neuroni rimasti 😁
 

LucaMs

Expert
Licensed User
Longtime User
Il client B4J per ora non riesce a connettersi con questa "modalità".
1592893118312.png


Ma ora, giuro sulla testa di un Matteo, riposo ;)
 

LucaMs

Expert
Licensed User
Longtime User
Sbaglio o... non esiste, tra gli strumenti base, un modo per aprire un file di testo, aggiungervi una riga per volta, quando serva, e chiuderlo quando vuoi?

In pratica voglio fare un log dei vari comandi (non so ancora se solo FTP o anche WEB). E' quasi certo che troverò qualcosa sul sito ma non sarebbe male che facesse già parte del Core. Unica cosa vagamente somigliante è il File.WriteList, che non è esattamente ciò che intendo.

Scrivo questo per dire che, maremma bislacca, ogni volta che ti metti a sviluppare qualcosa, devi "fermarti" per "creare qualcosa" di contorno (è vero che te lo ritroverai per successivi progetti, ma intanto perdi tempo rispetto al tuo obiettivo).
 

Xfood

Expert
Licensed User
oppure... sbaglio! Esiste eccome: TextWriter.
ciao,
io ho creato questa funzioncina

B4X:
    Dim Filelog As String
    Dim stringa as string
    DateTime.DateFormat = "yyyyMMdd"
    Filelog=DateTime.Date(DateTime.Now) &".log"

Stringa="scrivo un log"
LogWrite(stringa,"log\"&Filelog,File.DirApp)


Sub LogWrite(EventsLog As String,Filelog As String,dirlog As String)

    Log(EventsLog)

    Dim TextWriter1 As TextWriter
    TextWriter1.Initialize(File.OpenOutput(dirlog, Filelog, True))
    TextWriter1.WriteLine("- " & EventsLog)
    TextWriter1.Close

End Sub
 

Star-Dust

Expert
Licensed User

Dey

Active Member
Licensed User
Longtime User
ciao
anni fa, partendo da JRDC2 no UI con la libreria jSystemTray ho creato una piccola interfaccia
questo è il risultato
jSystemTray.png

B4X:
        tray.Initialize
        Dim MenuItems() As String = Array As String("ATTIVA LOG", "DISATTIVA LOG", "-", "Exit")
        icon1.Initialize("icon1", RedImage, MenuItems)
Giusto 2 righe di codice
 

Xfood

Expert
Licensed User
che ti serve di preciso? Avere un interfaccia a schermo oltre a quelal iconizzata ?
avere un'interfaccia che posso iconizzarla e va nella systray, posso aprirla, e gestire un minimo di eventi,
tipo avvio servizio, stop servizio, uscire dalla procedura,
vusualizzare il log, ecc, avevo gia fatto una cosa simile e pensavo funzionasse, e allegato qui.
 

LucaMs

Expert
Licensed User
Longtime User
ciao,
io ho creato questa funzioncina

B4X:
    Dim Filelog As String
    Dim stringa as string
    DateTime.DateFormat = "yyyyMMdd"
    Filelog=DateTime.Date(DateTime.Now) &".log"

Stringa="scrivo un log"
LogWrite(stringa,"log\"&Filelog,File.DirApp)


Sub LogWrite(EventsLog As String,Filelog As String,dirlog As String)

    Log(EventsLog)

    Dim TextWriter1 As TextWriter
    TextWriter1.Initialize(File.OpenOutput(dirlog, Filelog, True))
    TextWriter1.WriteLine("- " & EventsLog)
    TextWriter1.Close

End Sub
Pifferi! Peccato che il browser non segnali con un bel beep i post... ho appena creato una classe per scrivere dei file log :mad:;)
 

Star-Dust

Expert
Licensed User
avere un'interfaccia che posso iconizzarla e va nella systray, posso aprirla, e gestire un minimo di eventi,
tipo avvio servizio, stop servizio, uscire dalla procedura,
vusualizzare il log, ecc, avevo gia fatto una cosa simile e pensavo funzionasse, e allegato qui.
Infatti ho visto che hai fatta una. Avevo capito che avevi una versione NON-Ui e ne volevi una UI.
E quella che hai realizzato non funziona?
 

Xfood

Expert
Licensed User
ciao
anni fa, partendo da JRDC2 no UI con la libreria jSystemTray ho creato una piccola interfaccia
questo è il risultato
View attachment 96116
B4X:
        tray.Initialize
        Dim MenuItems() As String = Array As String("ATTIVA LOG", "DISATTIVA LOG", "-", "Exit")
        icon1.Initialize("icon1", RedImage, MenuItems)
Giusto 2 righe di codice
gia la systray mi funziona, e' il servizio ftp che non riceve nulla,
a meno che non metto
StartMessageLoop
che mi da errore perche non va in modalita' ui
 
Top