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

    perfezionamento trasferimento file: da server a client

    Ciao a tutti ragazzi! Io ho sviluppato una piccola applicazione che mi permette di trasferire un file dal server al client.(utilizzo un solo socket, sbagliato???)

    Vorrei perfezionarla in quanto accusa i seguenti problemi:

    -durante il trasferimento non posso muovere il form che indica il progresso, altrimenti si rallenta di parecchio il trasferimento e si blocca il form.
    Ho provato ad inserire un DoEvents ma non risolve il problema!

    -se provo a downlodare files di dimensioni notevoli e se al tempo stesso muovo il form di progresso, ricevo dal client il seguente errore: spazio dello stack esaurito!

    Pensate che possa essere correlato al fatto che uso un solo socket per tutto il programma???

    Ciao grazie, attendo...

    jabjoint

  2. #2
    Cosa contiene la form che indica il progresso? Vai a rappresentare anche i bytes trasferiti (per es con una progressbar) o non c'è niente di variabile (tipo una scritta "trasf. in corso"). Non avendo il codice davanti non è facile rispondere. Se vai ad indicare i byte trasferiti tramite una progressbar potrebbe essere un problema. Visto che i byte arrivano a piccoli gruppi, il tentativo di refresh della progressbar ti rallenta tutto. Prova ad aggiornarla per esempio ogni N millisecondi o ogni N bytes.

  3. #3

    Re: perfezionamento trasferimento file: da server a client

    Originariamente inviato da jabjoint
    -durante il trasferimento non posso muovere il form che indica il progresso, altrimenti si rallenta di parecchio il trasferimento e si blocca il form.
    Ovvio, c'è un solo thread che lavora sia al form che al trasferimento.
    Ho provato ad inserire un DoEvents ma non risolve il problema!
    Il DoEvents non è una panacea da usare per qualunque problema relativo ai form; addirittura il tuo problema è l'opposto di quello che risolve il DoEvents.
    -se provo a downlodare files di dimensioni notevoli e se al tempo stesso muovo il form di progresso, ricevo dal client il seguente errore: spazio dello stack esaurito!

    Pensate che possa essere correlato al fatto che uso un solo socket per tutto il programma???
    Se stai memorizzando tutto in una stringa è normale che dopo un po' dia un errore del genere, anche se non mi spiego cosa c'entri il movimento del "form di progresso" (che non capisco cosa sia, come Luciano79). Prova ad usare un buffer da riversare mano a mano su disco.
    Ciao grazie, attendo...
    Attendo anch'io di conoscere il linguaggio di programmazione di cui stiamo parlando.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Vi ringrazio per la risposta il linguaggio mi pareva di averlo messo cmq è VB6.

    questo è il codice che riceve i dati e li salva nel file:

    codice:
    Private Sub SOCK_RIC_FILE_DataArrival(ByVal bytesTotal As Long)
    
    'On Error Resume Next
    
        Dim strData As String
        Dim strDataSave As String
        
        DoEvents 
        SOCK_RIC_FILE.GetData strData, vbString
        
        
                Put #1, , strData
                Dim bytesPut As Long: Dim perDwn As Long: bytesPut = LOF(1)
                frmDownload.PBAR.Value = bytesPut
                frmDownload.Caption = "Download - " & getPer(bytesPut, lngFile) & "% - ...in corso..."
                frmDownload.tBytes.Caption = "Bytes scaricati: " & CStr(Int(bytesPut)) & " di " & CStr(Int(lngFile))
        
        CLIENT.SendData "FILERICEVED:" & LOF(1) & vbCrLf
        
                If LOF(1) = lngFile Then
                Close #1
                SOCK_RIC_FILE.Close
                Call SetEndDownload
                End If
                
    End Sub

    -SE NON inserisco il DoEvents non ottengo alcun errore ma fatico a muovere il form.

    -SE inserisco il DoEvents, posso muovere il FORM a piacimento.(quando lo muovo si ferma momentaneamente il trasferimento e quando la rilascio riprende). Il problema è che se inserisco questa funzione, il file lo scarico completamente, ma alla fine del download ottengo il seguente errore:

    Errore di run-time '40006':
    Protocollo o stato della connessione errato per la traslazione richiesta o la richiesta.
    PER TRASFERIRE IL FILE USO UN NUOVO SOCK: il server invia i dati direttamente verso il client.

    IL TRASFERIMENTO DEL FILE lo controllo attraverso un protocollo, con il SOCK con cui mi sono connesso fin dall' inizio al server.

    Volevo sapere se questa procedura potesse essere una delle cause dell' errore.

    Penso di essere stato chiaro stavolta, aspetto ancora...

    Immagini allegate Immagini allegate
    jabjoint

  5. #5
    Ciao ragazzi, il problema del trasferimento sono riuscito a risolverlo inserendo il DoEvents tra la ricezione e l' invio della ricevuta!

    Ma perchè, cosi funziona? Qualcuno è in grado di spiegarmi come si usa correttamente il DoEvents????

    codice:
        SOCK_RIC_FILE.GetData strData, vbString
        
               
                Put #1, , strData
                Dim bytesPut As Long: Dim perDwn As Long: bytesPut = LOF(1)
                frmDownload.PBAR.Value = bytesPut
                frmDownload.Caption = "Download - " & getPer(bytesPut, lngFile) & "% - ...in corso..."
                frmDownload.tBytes.Caption = "Bytes scaricati: " & CStr(Int(bytesPut)) & " di " & CStr(Int(lngFile))
        
        DoEvents
        CLIENT.SendData "FILERICEVED:" & LOF(1) & vbCrLf
    jabjoint

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 © 2026 vBulletin Solutions, Inc. All rights reserved.