Visualizzazione dei risultati da 1 a 5 su 5

Visualizzazione discussione

  1. #1

    [VB6] errore scaricando da internet la 16382esima pagina simile alle precedenti

    salve . . un saluto a tutto il forum . .
    mi sono appena registrato per esporvi un mio problema che da qualche tempo mi assilla

    Da circa 1 anno uso questo codice in VB6 per leggere/scaricare delle pagine web contenenti
    dati di profili utente su internet. Si tratta di giocatori di un videogioco flash online.
    Una volta raccolti tutti questi dati tiro fuori delle classifiche da mostrare agli stessi giocatori.

    Tutto funzionava correttamente . . il codice passava alla sub GetUrlSource il link
    della pagina e il nome del file sull'hd locale in cui memorizzare la pagina,
    prendere i dati necessari (una decina di valori numerici su partite vinte,
    sconfitte pareggi ect ect) . . e poi cancellare il file dal mio disco fisso.

    Il codice prevede oppurtuni ritardi e pause nella lettura per non ingolfare troppo
    la procedura di lettura delle pagine dal server del gioco.

    Ma da quando i giocatori da gestire sono diventati più di 16381 . . mi esce fuori un
    problema strano.

    Nel codice seguente infatti improvvisamente alla 16382esima invocazione della Sub seguente
    l'handle della connessione diventa = ZERO mentre prima ha sempre un valore tipo 13367033

    la variabile che si azzera è lSession

    di conseguenza il file generato sul mio hd diventa vuoto è il programma va in errore.
    Questo succede anche cambiando il link (sUrl) e cercando di leggere una pagina già letta
    in precedenza correttamente.

    Che succede dopo 16382 cicli usando il componente Inet?
    Microsoft Internet Trasfer Control 6.0
    . . qualcosa . . qualche buffer si intasa? . . come posso rimediare senza
    stravolgere tutto il codice?

    Se chiudo il programma e lo faccio riavviare dal punto in cui si è bloccato, tutto
    continua correttamente fino alla fine ma siccome ci vogliono ore per leggere tutte
    quelle pagine spesso il problema si verifica il mia assenza e quindi i dati totali
    letti rischiano di essere aggiornati con troppa differenza di tempo tra il primo e l'ultimo

    eccole dichiarazioni iniziali e la sub dove si verifica il pasticcio:
    (grazie per l'attenzione)

    codice:
    Private Const IF_NO_CACHE_WRITE = &H4000000
    Private Const BUFFER_LEN = 256
    
    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
    Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
    Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
    
    . . . 
    
    Sub GetURLSource(sUrl As String, fileSulPC As String)
    
      Dim sBuffer          As String * BUFFER_LEN
      Dim sData            As String
      Dim lInternet        As Long
      Dim lSession         As Long
      Dim lReturn          As Long
        
      DoEvents
      
        'prendo l'handle della connessione corrente
        lSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
      
      'prendo l'handle dell'URL
      If lSession Then lInternet = InternetOpenUrl(lSession, sUrl, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
     
    '-------------------------------------------------------------------------------   
      ' dopo 16381 chiamate a questa sub  . . lSession diventa =0
    '-------------------------------------------------------------------------------
     
      'se c'è l'handle dell'URL passo alla lettura della pagina
      If lInternet Then
        Call InternetReadFile(lInternet, sBuffer, BUFFER_LEN, lReturn)
        sData = sBuffer
        Do While lReturn <> 0
          Call InternetReadFile(lInternet, sBuffer, BUFFER_LEN, lReturn)
          sData = sData + Mid$(sBuffer, 1, lReturn)
        Loop
      End If
      
      Call InternetCloseHandle(lInternet)   'chiudo l'URL
      
      Open fileSulPC For Binary As #9
          Put #9, , sData
      Close #9
    End Sub
    Ultima modifica di MItaly; 07-01-2014 a 14:53 Motivo: tag CODE

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.