Italian RDC : Collegare il server RDC con connessione Dati 3g in sostituzione del Wi-Fi

Antonio1

Member
Licensed User
Longtime User
Ciao
Con piacere noto che la comunità italiana di B4a è diventata più numerosa e saluto tutti...
Vengo al dunque sperando in un aiuto o in una delucidazione sulla questione:
Uso in alcune mie applicazioni il server RDC collegato a base dati MySql o SqLite con collegamento Wi-Fi dalle postazioni mobili (tablet/smatphone) al server presente su un pc di rete locale (router ecc...).
Il funzionamento è ottimo, il server risponde benissimo e con grande velocità, nessun problema ad eseguire Slect, Insert ecc in tempo reale sulle tabelle del database presente sul server locale, nessun problema con il multithread , più dispositivi tablet/smartphone si collegano direttamente al server via Wi-Fi e quindi alla base dati.
Ora vorrei sapere se qualcun altro ha avuto la possibilià di effettuare il collegamento anche tramite connessione dati via 3G.
Premesso che non sono proprio una cima con le reti e quindi forse sto chiedendo una cosa impossibile;
da una ricerca effettuata anche sul sito in inglese sembra che bisognava provare a cambiare la porta in ascolto del server RDC da 17178 a 587; cosa ovviamente fatta senza alcun risultato!

Ringrazio tutti ...
 

max611

Active Member
Licensed User
Longtime User
ciao antonio
io non sono una cima,...sono proprio una pianura con le reti
scusa se ti disturbo ma da due mesi sto imazzendo a realizzare quello che tu fai in modo ottimo
non è che potresti darmi qualche esempio o delucidazioni in merito
devo anche io collegare due smartphone ad un db sqlite sul pc con RDC cosa che per me è assai diffoltosa
ti ringrazio per la pazienza
 

LucaMs

Expert
Licensed User
Longtime User
Anch'io sono al livello del mare, in quanto a 3G.

Per quanto io immagino, dato che non ho mai usato in assoluto 3G, esso dovrebbe essere soltanto un metodo alternativo per connettersi ai server, quindi anche al tuo RDC.

Cioè, sicuramente sbaglio, ma penso che tu non debba fare alcunché.


[P.S. forse sbaglio, perché vedo in giro sul web che esistono router specifici per il 3G]
 
Last edited:

max611

Active Member
Licensed User
Longtime User
ti ringrazio per le risposte
ho provato l'esempio da tempo ma dato la mia (grande) ignoranza in materia non riesco a far combaciare il tutto
Per la questione server sembra tutto corretto poi...
ciao
 

LucaMs

Expert
Licensed User
Longtime User
Eh, senza altre informazioni è difficile darti una mano.

Hai seguito l'esempio alla lettera o modificato qualcosa?

Se hai fatto modifiche, potresti postare i sorgenti o almeno gli errori che ottieni.
 

max611

Active Member
Licensed User
Longtime User
si hai ragione sono un po sconfusionato forse son partito subito con un programma grossino per le mie possibilità

comunque lo spezzone di esempio è questo:

Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
reqManager.Initialize(Me, "http://localhost:17178")
End If
End Sub

Sub Activity_Click
GetAnimal("1")
End Sub

Sub GetAnimal(Name As String)
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_animal"
cmd.Parameters = Array As Object(Name)
reqManager.ExecuteQuery(cmd, 0, Null)
End Sub

Sub JobDone(Job As HttpJob)
If Job.Success = False Then
Log("Error: " & Job.ErrorMessage)
Else
If Job.JobName = "DBRequest" Then
Dim result As DBResult = reqManager.HandleJob(Job)
reqManager.PrintTable(result)
End If
End If
Job.Release
End Sub


e dovrei sostituire con il mio che è:

Sub Activity_Create(FirstTime As Boolean)

If File.Exists(File.DirRootExternal,"/MP/composizione.db")=False Then
File.Copy(File.DirAssets,"composizione.db",File.DirRootExternal,"/MP/composizione.db")
End If

SQL1.Initialize(File.DirRootExternal,"/MP/composizione.db",True)

Activity.LoadLayout("aggiorna_db")
Activity.Title = "Composizione Cassette"

dbcursor =SQL1.ExecQuery("select * from articoli")
posizione_ultimo= dbcursor.RowCount-1
dbcursor.Close
posizione=0
popolaspinner
End Sub

Sub Activity_Pause (UserClosed As Boolean)
If UserClosed Then
SQL1.Close
End If
End Sub

Sub popolaspinner
Dim file_name As String
Dim dir As String= "/storage/extSdCard/MP/immagine"

If posizione_ultimo>-1 Then
Spinner1.Clear
dbcursor =SQL1.ExecQuery("select * from articoli ORDER BY cliente")
dbcursor.Position=posizione
tx_ID.Text=(dbcursor.GetString("ID"))
tx_cliente.Text=(dbcursor.GetString("cliente").ToUpperCase)
tx_prodo.Text=(dbcursor.GetString("prodotto").ToUpperCase)
tx_mostrina.Text=(dbcursor.GetString("mostrina").ToUpperCase)
tx_laterale.Text=(dbcursor.GetString("laterale").ToUpperCase)
tx_interr.Text=(dbcursor.GetString("interr").ToUpperCase)
tx_manopola.Text=(dbcursor.GetString("manopola").ToUpperCase)
tx_cavo.Text=(dbcursor.GetString("alimentazione").ToUpperCase)
tx_vibratore.Text=(dbcursor.GetString("vibratore").ToUpperCase)
tx_note.Text=(dbcursor.GetString("note").ToUpperCase)

For i = 0 To dbcursor.RowCount - 1
dbcursor.Position = i
Spinner1.Add(dbcursor.GetString("cliente").ToUpperCase & " - " & dbcursor.GetString("prodotto").ToUpperCase)
Next

dbcursor.Close
End If

ID_damodificare=tx_ID.text
cliente_dm=tx_cliente.Text
prodo_dm=tx_prodo.Text
mostrina_dm=tx_mostrina.Text
laterale_dm=tx_laterale.Text
interr_dm=tx_interr.Text
manopola_dm=tx_manopola.Text
cavo_dm=tx_cavo.Text
vibra_dm=tx_vibratore.Text
note_dm=tx_note.Text

file_name=tx_cliente.Text & " - " & tx_prodo.text & "1" & ".jpg"
If File.Exists(dir, file_name)=True Then Label11.Visible=True
End Sub


ho provato a modificare config.properties:
#Lines starting with '#' are comments.
#Backslash character at the end of line means that the command continues in the next line.


DriverClass = org.sqlite.JDBC
JdbcUrl = jdbc: sqlite: C:\Users\massimo\MP_database\composizione.db

#SQL Server
#DriverClass=net.sourceforge.jtds.jdbc.Driver
#JdbcUrl=jdbc:jtds:sqlserver://<database server ip>/<database>
User=
Password=
ServerPort=17178
#If Debug is true then this file will be reloaded on every query.
#This is useful if you need to modify the queries.
Debug=true


Forse troppo??

Gazie
 

LucaMs

Expert
Licensed User
Longtime User
è leggermente incasinato e adesso non ho tempo, purtroppo.

Intanto ti consiglierei di chiamare le variabili globali (che poi in realtà sono variabili utilizzabili da tutte le routine della Activity o del modulo)
con il prefisso m. Ad esempio mPosizioneUltimo. Questo perché così, rileggendo il codice a distanza di tempo, capisci al volo che questa variabile è utilizzata in altre routine (meglio comunque tentare di usare il minor numero possibile di variabili gloabali, preferendo passarne i valori come parametri alle routine/funzioni).

All'interno di popolaspinner (nome poco chiaro, meglio PopolaSpnArticoli) non popoli solo lo spinner, compi un'operazione che dovresti eseguire in una routine differente.

Infine, cosa più importante: tu non stai usando RDC!
Tu copi il db dalla Assets alla External (che è sempre nel dispositivo). Tra l'altro, poi inizializzi con True come ultimo parametro, invece dovresti mettere False.

RDC nell'esempio ha un db SQLite sul PC e le query da eseguire si trovano (devi metterle) nel file config.properties.

(grrr tardissimo)
 
Last edited:

max611

Active Member
Licensed User
Longtime User
scusami tanto tanto, e ti ringrazio per i tuoi consigli utilissimi
qualcosa comincio a capire
piu avanti ti disturbero ancora;)
grazie
 

picenainformatica

Active Member
Licensed User
Longtime User
Per accedere da una rete esterna (3g o Internet) ad una macchina della tua rete domestica devi impostare il router in modo che reindirizzi le chiamate ad una specifica porta verso il PC che le gestirà.
Vista da fuori la tua rete è SOLO il router. Le altre macchine esistono solo per quello che permette il router (impostandolo).
 

max611

Active Member
Licensed User
Longtime User
grazie purtroppo ho capito che fastweb non è (o poco) manipolabile
 

LucaMs

Expert
Licensed User
Longtime User
Per accedere da una rete esterna (3g o Internet) ad una macchina della tua rete domestica devi impostare il router in modo che reindirizzi le chiamate ad una specifica porta verso il PC che le gestirà.
Vista da fuori la tua rete è SOLO il router. Le altre macchine esistono solo per quello che permette il router (impostandolo).

Meno male, allora non ho scritto ca...pperate, per una volta :p
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Ciao
Con piacere noto che la comunità italiana di B4a è diventata più numerosa e saluto tutti...
Vengo al dunque sperando in un aiuto o in una delucidazione sulla questione:
Uso in alcune mie applicazioni il server RDC collegato a base dati MySql o SqLite con collegamento Wi-Fi dalle postazioni mobili (tablet/smatphone) al server presente su un pc di rete locale (router ecc...).
Il funzionamento è ottimo, il server risponde benissimo e con grande velocità, nessun problema ad eseguire Slect, Insert ecc in tempo reale sulle tabelle del database presente sul server locale, nessun problema con il multithread , più dispositivi tablet/smartphone si collegano direttamente al server via Wi-Fi e quindi alla base dati.
Ora vorrei sapere se qualcun altro ha avuto la possibilià di effettuare il collegamento anche tramite connessione dati via 3G.
Premesso che non sono proprio una cima con le reti e quindi forse sto chiedendo una cosa impossibile;
da una ricerca effettuata anche sul sito in inglese sembra che bisognava provare a cambiare la porta in ascolto del server RDC da 17178 a 587; cosa ovviamente fatta senza alcun risultato!

Ringrazio tutti ...

Ciao Antonio,
a livello di software non devi fare granchè, se non cambiare l'indirizzo IP del server al quale si deve collegare, mettendolo da locale a pubblico.
Tu adesso hai un indirizzo del tipo 192.168.1.100 e dovrai cambiarlo in (ad esempio) 151.46.67.80 (ovviamente devi capire quale è).
Poi però il lavoro più grande lo devi fare sul router, affinchè la richiesta che gli arriva in entrata sulla porta dell'RDC venga reindirizzata al server locale, quindi (ad esempio) devi programmare un reindirizzamento sulla porta 17178 (o quella corretta, non so su che porta lavora il RDC) all'indirizzo 192.168.1.100 (che è il tuo server locale).
Se in locale il tutto ti funziona bene significa che il firewall sul PC server ha già la porta corretta aperta, per cui alivello di firewall dovresti essere a posto, a meno che il firewall non sia configurato con la porta aperta solo per connessioni locali, nel qual caso devi aprire anche la porta sul firewall per le connessioni esterne.

Ciao
Sergio
 

Antonio1

Member
Licensed User
Longtime User
Ciao Antonio,
a livello di software non devi fare granchè, se non cambiare l'indirizzo IP del server al quale si deve collegare, mettendolo da locale a pubblico.
Tu adesso hai un indirizzo del tipo 192.168.1.100 e dovrai cambiarlo in (ad esempio) 151.46.67.80 (ovviamente devi capire quale è).
Poi però il lavoro più grande lo devi fare sul router, affinchè la richiesta che gli arriva in entrata sulla porta dell'RDC venga reindirizzata al server locale, quindi (ad esempio) devi programmare un reindirizzamento sulla porta 17178 (o quella corretta, non so su che porta lavora il RDC) all'indirizzo 192.168.1.100 (che è il tuo server locale).
Se in locale il tutto ti funziona bene significa che il firewall sul PC server ha già la porta corretta aperta, per cui alivello di firewall dovresti essere a posto, a meno che il firewall non sia configurato con la porta aperta solo per connessioni locali, nel qual caso devi aprire anche la porta sul firewall per le connessioni esterne.

Ciao
Sergio

Grazie della Risposta Sergio

In verità con non pochi salti mortali utilizzando il forum in inglese e comunque le risorse del web,
avevo già trovato la soluzione che corrisponde a quello che hai appena detto tu

faccio mea culpa per non aver condiviso subito, ma per motivi di tempo, manco da parecchio forum...

se posso aggiungere qualche precisazione:

per potersi connettere da device mobile via 3G, al proprio RDC locale, cioè che lavora sul proprio PC di casa o azienda
occorre avere disponibile un ip pubblico statico e inizializzare:

B4X:
reqManager.Initialize(Me, "http://proprio_indirizzo_pubblico:17178")

se non si dispone di un proprio indirizzo pubblico statico allora si può utilizzare
un indirizzo su un dominio NO-IP reso disponibile FEE da diversi gestori di host
questo perchè normalemente i router con indirizzo dinamico, il nome lo dice, cambiano IP secondo
le esigenze del prorio provider, per cui gli indirizzi verso l'esterno cambiano quasi sempre ad ogni sessione
e risulta impossibile stabilire connessioni da mobile/remoto.

poi bisogna settare opportunamente il prorio router:
(PORt MAPPING-DNS DINAMICO)

a questo punto il vosto PC di casa diventa a tutti gli effetti come un Host remoto
e risponde e dialoga ad ogni richiesta del CLIENT Android da ogni parte del mondo (linea 3g permettendo)
e con il computer necessariamente acceso...

Vi assicuro che funziona egregiamente ed è entusiasmante vedere RDC che lavora silenziosamente ed
esegue qualsiasi operazione richiesta dal Client Android sul database ad esso collegato...

Ciao
 

Antonio1

Member
Licensed User
Longtime User
ciao antonio
io non sono una cima,...sono proprio una pianura con le reti
scusa se ti disturbo ma da due mesi sto imazzendo a realizzare quello che tu fai in modo ottimo
non è che potresti darmi qualche esempio o delucidazioni in merito
devo anche io collegare due smartphone ad un db sqlite sul pc con RDC cosa che per me è assai diffoltosa
ti ringrazio per la pazienza

ciao max611

per iniziare devi seguire passo passo quello che è gia indicato nei vari tread specifici sul forum in inglese
e chiaramente quelli del Grade EREL...

Io ci ho messo un po...

tieni presente comunque che occorre parametrizzare per bene RDC e farlo partire sul PC che a sua volta deve essere
colegato ad una rete locale / router WIFI
Poi occorre che tu prenda l'indirizzo IP asseganto dal router WI-FI a questo PC su cui gira RDC e settarlo in

B4X:
reqManager.Initialize(Me, "http://Indirizzo_ip_del_pc:17178")

del programma b4A che gira sul CLIENT android

Ciao...
 

max611

Active Member
Licensed User
Longtime User
grazie antonio1 grazie per la risposta
e...scusa per l'intusione
 

max611

Active Member
Licensed User
Longtime User
scusate ancora una domanda, nel config.properties come password e user :
#SQL Server
#DriverClass=net.sourceforge.jtds.jdbc.Driver
#JdbcUrl=jdbc:jtds:sqlserver://<database server ip>/<database>
User=
Password=

ServerPort=17178
#If Debug is true then this file will be reloaded on every query.
#This is useful if you need to modify the queries.
Debug=true

vanno messe quelle del DB sqlite?
obbligatoriamente o no??
perchè il mio non ho messo niente
grazie ancora
 
Top