Italian [B4A] Come testare efficacemente connessione ad internet?

amorosik

Well-Known Member
Licensed User
Come fare per testare in modo efficace se la connessione telefono ad internet e' disponibile ed il telefono riesce a pingare un certo sito web?
Per 'modo efficace' intendo dire che la connessione puo' essere via wifi e/o via connessione dati rete telefonica
Magari se si potesse sapere anche quale canale viene usato (wifi/rete telefonica) ancora meglio
In sostanza sto cercando di realizzare una funzione che una volta richiamata restituisca oltre allo stato connessione, anche il tipo, e magari pure altre informazioni come il tempo latenza risposta o latro
 

sirjo66

Well-Known Member
Licensed User
un primo passo per capire se sei connesso alla rete Wifi oppure no, può essere questo:
B4X:
    Dim ssocket As ServerSocket
    If ssocket.GetMyWifiIP = "127.0.0.1" Then
        ' possibile connessione dati
    Else
        ' collegato al WiFi
    End If
Ho scritto volutamente "possibile connessione dati", perchè non è detto che sia collegato ad internet, questo test serve solo per capire se hai la connessione WiFi
 

amorosik

Well-Known Member
Licensed User
No, questo funzionerebbe solo con scheda rete wifi
Se fosse connesso via rete dati telefonica, non credo vada bene
 

LucaMs

Expert
Licensed User
E' un argomento molto discusso e anch'io ho ancora parecchi dubbi.

Di solito Erel consiglia di tentare di scaricare la pagina Google.com; se la cosa riesce, una connessione ad Internet è sicuramente attiva, ma non sai se sia wi-fi o dati.
(ci sarebbe una "pagina" molto meno "pesante" e senza rischi che Google ti proponga la conferma tramite quei CAPTCHA o come diavolo si chiamano: http://www.icanhazip.com. Lati negativi: 1-non è https 2-chissà a chi appartiene [non che di Google ci si possa fidare al massimo, direi]).

Poi ci sarebbe una vecchia libreria... che devo cercare, la quale forniva diverse informazioni.
 

udg

Expert
Licensed User
Un paio di considerazioni (già apparse diverse volte in thread simili):
- sapere di avere accesso ad Internet ma non riuscire a contattare il server necessario al servizio è praticamente inutile
- un test positivo ad avvio app non garantisce che al momento in cui sarà davvero necessario scambiare dati con il server la rete funzioni ancora

Da cui, piuttosto che testare google.com meglio provare direttamente con il proprio server; in caso positivo, si ricava sia che Internet funzioni sia che il proprio server sia raggiungibile. Ovviamente in caso negativo toccherà valutare l'errore per capire se manchi del tutto la connessione o sia un problema del server, ma comunque resta che l'app non potrà andare avanti se non con dati locali aggiornati all'ultima sincronizzazione.
 

amorosik

Well-Known Member
Licensed User
Un paio di considerazioni (già apparse diverse volte in thread simili):
- sapere di avere accesso ad Internet ma non riuscire a contattare il server necessario al servizio è praticamente inutile
- un test positivo ad avvio app non garantisce che al momento in cui sarà davvero necessario scambiare dati con il server la rete funzioni ancora

Da cui, piuttosto che testare google.com meglio provare direttamente con il proprio server; in caso positivo, si ricava sia che Internet funzioni sia che il proprio server sia raggiungibile. Ovviamente in caso negativo toccherà valutare l'errore per capire se manchi del tutto la connessione o sia un problema del server, ma comunque resta che l'app non potrà andare avanti se non con dati locali aggiornati all'ultima sincronizzazione.
No, non credo sia un test inutile, perche' l'obiettivo e' capire rapidamente dove possa essere il problema
Se la tua app non comunica con chi dovrebbe, la prima cosa e' accertarsi possa 'parlare' con internet
E potrebbe non riuscire a farlo per diversi motivi, sia problemi hardware che mancanza credito sim che mancanza copertura rete telefonica o altro
Una volta accertato che la connettivita' (via wifi o rete telefonica dati o altro) c'e' allora si puo' proseguire col verificare la funzionalita' del sistema destinatario della comunicazione che pure illo potrebbe non essere raggiungibile per svariati motivi (programma fermo, mancata configurazione router per dirottare richieste da wan a lan, indirizzo wan scorretto, ecc..)
Certo che, testare il server col quale devi comunicare ti conferma della possibilita' di farlo (di comunicare intendo), provato quello vuol dire che e' tutt'appo'
Ma da telefono a server di destinazione ce n'e' parecchia di strada da fare e piu' dettagli abbiamo delle varie tratte usate nella comunicazione, e piu' e' rapida l'eventuale correzione delle componenti malfunzionanti

".. un test positivo ad avvio app non garantisce che al momento.." questo e' sicuro, come lo e' il fatto che non c'e' niente che GARANTISCA che al momento della necessita' il canale da usare per le comunicazione sia utilizzabile
Io questi test li metterei su sezione del programma dedicata alla configurazione/manutenzione, non li utilizzerei ad avvio programma, credo sia inutile
 

udg

Expert
Licensed User
Io questi test li metterei su sezione del programma dedicata alla configurazione/manutenzione, non li utilizzerei ad avvio programma, credo sia inutile
Concordo. Mi pare più che sensato proprio per le osservazioni precedenti.
 

LucaMs

Expert
Licensed User
Ovviamente in caso negativo toccherà valutare l'errore per capire se manchi del tutto la connessione o sia un problema del server, ma comunque resta che l'app non potrà andare avanti se non con dati locali aggiornati all'ultima sincronizzazione.
Servirebbe un test molto veloce per verificare che sul dispositivo ci sia una connessione Internet attiva, perlomeno in alcuni casi, come ad esempio le chat.
Ogni frase che l'utente dovesse scrivere e tentare di inviare dovrebbe essere preceduta dal quel controllo; oppure?
 

udg

Expert
Licensed User
Oppure invii e speri bene. Se non ti rispondono il messaggio si è perso oppure hanno altro da fare :D
Per fortuna questa roba non serve per gestire situazioni importanti.
Se c'è un server potresti pensare ad un protocollo secondo il quale ad ogni messaggio inviato tu ottenga un risposta di conferma in merito al fatto che sia giunto sul server. Poi sarà compito suo inviarlo ai destinatari ed eventualmente tener traccia dell'effettivo recapito. Spesso non vale la pena. Un po' come quando la conversazione avviene su linea disturbata: chiedi di ripetere la frase, ti arrangi con ciò che hai sentito, etc
 

Filippo

Expert
Licensed User
Io questi test li metterei su sezione del programma dedicata alla configurazione/manutenzione, non li utilizzerei ad avvio programma, credo sia inutile
Anche io concordo.
Quello che uso io è una cosa del genere:
B4X:
Sub Globals
    Private IdQuelloCheVuoi1 as int = 1
    Private IdQuelloCheVuoi2 as int = 2
End Sub

Private Sub btnTest1_Click
    CheckInternetConnection(IdTest1)
End Sub

Private Sub btnTest2_Click
    CheckInternetConnection(IdTest2)
End Sub

Sub CheckInternetConnection(IdConnection As Int)
    Dim job As HttpJob
    job.Initialize(IdConnection, Me)
    job.Download("https://www.google.com")
End Sub

Sub JobDone(Job As HttpJob)
    If Job.Success Then
        Select Job.JobName
            Case IdQuelloCheVuoi1 
                ...
            Case IdQuelloCheVuoi2
                ...
        End Select
    Else
        ...
    End If
    Job.Release
End Sub
 

amorosik

Well-Known Member
Licensed User
Servirebbe un test molto veloce per verificare che sul dispositivo ci sia una connessione Internet attiva, perlomeno in alcuni casi, come ad esempio le chat.
Ogni frase che l'utente dovesse scrivere e tentare di inviare dovrebbe essere preceduta dal quel controllo; oppure?
Mi pare esagerato testare la comnettivita' prima di ogni messaggio
Piuttosto se e' una comunicazione importante allora si prevede una qualche forma di verifica ad esempio se deviceA deve inviare a deviceB, deviceA manda liberamente e si attende da deviceB un segnale di ricezione o un checksum ancora meglio
Se entro X secondi non torna a deviceA il segnale di ricezione o il checksum allora bisogna controllare
 
Top