Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [vb2010] verifica velocissima su connessione internet

    salve a tutti,

    sono nuovissimo sia di questo forum che di MS Visual Studio 2010.
    Senza troppi preamboli vorrei esporvi il mio problema.


    ---- PROBLEMA: -----
    - riesco ad avere la conferma di connessione internet ATTIVA in pochi attimi ma ...
    - ci vogliono oltre 10 secondi per avere la conferma di una connessione NON ATTIVA


    Sto tentato di imparare a programmare in Visual Basic (con la nuova versione 2010) e vi assicuro sto trovando seri problemi nel passaggio dal VB6 ma un poco alla volta sto risolvendo le difficoltà che incontro.

    Ora sto cercardo di capire come fare ad usare un codice che prima di caricare o scaricare files dal mio spazio FTP di libero-digiland, mi faccia una verifica se sono connesso ad internet.

    Ho fatto tante ricerche su Google e forum specializzati e finora ho trovato diverse soluzioni che funzionano perfettamente quando il pc su cui sta girando il mio esempio è connesso ad internet.
    Sono velocissime a darmi delle conferme di connessione sopratutto quelle soluzioni che fanno dei ping-test su siti notissimi tipo www .google. it e .com ma sopratutto con www .libero . it
    Di diversi decimi di secondo più lente le risposte-ping da tiscali, yahoo, fastweb e virgilio.

    Quindi tutto funziona a MERAVIGLIA quando la connessione è attiva ma se mentre il test sta girando stacco il cavo telefonico dal mio router devo mediamente aspettare 14 secondi per avere la risposta che mi aspettavo di "NON CONNESSIONE"

    Non credo serva mostravi i miei tentativi vani fatti finora ma per evitare di usare funzioni, procedure e Api e vespe e calabroni che ho già provato, ve le riassumo solo brevemente:


    Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Integer, ByVal dwReserved As Integer) As Boolean ....

    oppure

    My.Computer.Network.Ping

    oppure

    Public Function IsConnectionAvailable() As Boolean
    Dim objUrl As New System.Uri("http://www.google.com") .... ect ect

    oppure

    zzz = System.Text.Encoding.ASCII.GetString((WC.DownloadD ata(myIPsite)))
    (provando a scaricare un file che ... se riesce mi dice che la connesione c'è)


    ho provato pure a pingare dal prompt di dos salvando la risposta in un file di testo così:

    PIDexe = Shell("cmd /c ping -n 1 www . google . it >c:\file1.txt",,true)

    per poi leggerlo immediatamente verificando se il ping (un solo tentativo ecco perchè -n 1) era riuscito oppure fallito .... ma anche in questo caso se la connessione è attiva ho una risposta in pochi instanti invece se il ruoter è 'spento' o il cavo lan è staccato per avere una risposta negativa devo attendere quasi 15 secondi.

    Secondo me il problema è che se non c'è connessione, il sistema si ostina a provare troppo a lungo perciò sarebbe anche interessante trovare un modo per ridurre questa ostinazione al massimo ad un paio di secondi magari terminando il processo di PING lanciato prima ... ma da solo non riesco a farlo

    Ma sicuramente voi conoscete un sistema più rapido, sicuro e collaudato, ci sarà qualche Api magica che fa tutto in un attimo ... vero?
    Io la sto cercando da giorni e non la trovo ... e sono qui in fiduciosa attesa.
    ...GRAZIE per l'attenzione
    lucio

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Rapida ricerca su google ed ecco il risultato
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    ti ringrazio per il rapido sforzo ma di soluzioni come queste ne ho
    provate almeno una decina ... e siamo alle solite

    ho preso il codice da qui
    (quello che mi hai segnalato era per C#)


    Public Function HasInternetConnection(ByRef url As String) As Boolean
    Dim uri As New System.Uri(url) ' come url passerò il parametro http: //www .google .it (senza spazi) <<<<<<
    'Create a new WebRequest
    Dim request As WebRequest = WebRequest.Create(uri)
    'Create new WebResponse for checking the response
    'from our WebRequest
    Dim response As WebResponse
    Try
    'If we get a response then we are successful
    response = request.GetResponse()

    'Close and dispose
    response.Close()
    request = Nothing

    response.Close()
    request = Nothing

    'Return true and a connection was made
    Return True
    Catch ex As Exception
    'Whoops, got an error so no connection is present
    Return False
    End Try
    End Function



    ebbene il risultato è sempre lo stesso ... la suddetta funzione mi risponde:


    TRUE - (se la connessione è attiva) ... in 3 decimi di secondo (dico decimi!!!)

    FALSE - (se la connessione non attiva) ... in 13 secondi ... (dico secondi) ... TROPPI!!!

    mentre avrei bisogno di una risposta un pò più veloce, diciamo sotto i 2 secondi altrimenti
    questa attesa mi crea problemi di fluidità nel resto del programma.

    se l'hai provata sul tuo pc prima di segnalarla, puoi dirci che risultati ottieni?
    puoi fare una prova? .... Scusa ma è molto importante per me.
    Oppure c'è da fare qualche modifica che mi sfugge?

    GRAZIE

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Basta impostare il timeout dell'oggetto WebRequest al valore massimo che intendi aspettare.
    codice:
    request.Timeout = 2;
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    quindi c'era qualcosa da modificare .... OTTIMO!!
    ero un pò sfiduciato con questi timeout infatti nei miei tentativi precedenti,
    sia inserendone uno nel comando ping del prompt dos
    e sia come parametro del rientro dalla Shell ... non ottenevo alcun risultato invece
    inserendolo qui (è una parte del codice che ho già postato prima) ...

    . . .
    Dim response As WebResponse

    request.Timeout = 400 ' cioè 400 millisecondi

    Try 'If we get a response then we are successful
    response = request.GetResponse()
    'Close and dispose
    response.Close()
    . . .

    FUNZIONA!

    Adesso se mentre 'gira' il test stacco il doppino telefonico, dopo circa
    2 secondi mi viene segnalata la connessione ad internet FALSE

    Perfetto così ... grazie 10000 Wolverine

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Prego, per così poco!!
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.