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

    [VB6]Run time error 10055.

    Ho creato un programma per inviare files da un client a un server. Quando invio i pacchetti, contenenti i byte del file, esce run time error 10055 "No buffer space is available" . Vi posto il codice della sub che invia i dati. Credo che questo errore avvenga a causa del ciclo while che invia di continuo i byte. Però la cosa che a me sembra strana; è che non sempre viene questo errore.


    codice:
    handle = FreeFile
    a = True
    Open percorso For Binary As handle
    While a = True
    Get handle, , dati
    DoEvents
    w2.SendData dati
    Wend

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quel ciclo non si conclude mai e continua a leggere dal file oltre la sua fine ... ovviamente, a un certo punto il buffer sarà vuoto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il ciclo si conclude. Il server ad ogni ricezione verifica che la dimensione del file ricevuto sia quella della dimensione inviatagli dal client. In seguito, quando finisce l'upload invia un comando che fa terminare il ciclo. Comunque quell' errore viene prima di aver concluso il trasferimento file.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se il ciclo (come dici) si conclude, in quale riga hai quell'errore?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Nella seguente riga:

    w2.SendData dati

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quell'errore può indicare che effettui troppe connessioni e troppo velocemente ...

    Bisognerebbe avere presente tutto il codice relativo alla connessione per capire il problema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Posto tutto il codice in modo tale sia tutto più chiaro:

    CLIENT



    codice:
    Private percorso As String
    Private nome As String
    Private dimensione As Long
    Private handle As Integer
    Private a As Boolean
    Private dati(4000) As Byte
    
    Private Sub Command1_Click()
    w.Close
    w.Connect Text4.Text, 8000
    w2.Close
    w2.Connect Text4.Text, 8001
    End Sub
    
    Private Sub Command2_Click()
    cd.ShowOpen
    percorso = cd.FileName
    nome = cd.FileTitle
    dimensione = FileLen(percorso)
    w.SendData "///" & nome & "///" & dimensione
    End Sub
    Private Sub w_Connect()
    Form1.Caption = "Connesso."
    End Sub
    
    
    
    Private Sub w_DataArrival(ByVal bytesTotal As Long)
    
    Dim data As String
    w.GetData data
    
    If data = "ack" Then
    handle = FreeFile
    a = True
    Open percorso For Binary As handle
    While a = True
    Get handle, , dati
    DoEvents
    w2.SendData dati
    Wend
    End If
    
    If data = "fine" Then
    Close handle
    a = False
    End If
    End Sub

    SERVER:


    codice:
    Private nome() As String
    Private dimensione As Long
    Private handle As Integer
    
    Private Sub Form_Load()
    w.Close
    w.LocalPort = 8000
    w.Listen
    w2.Close
    w2.LocalPort = 8001
    w2.Listen
    End Sub
    
    Private Sub w_ConnectionRequest(ByVal requestID As Long)
    w.Close
    w.Accept requestID
    End Sub
    
    Private Sub w_DataArrival(ByVal bytesTotal As Long)
    Dim data As String
    w.GetData data
    If Left(data, 3) = "///" Then
    
    nome = Split(data, "///")
    dimensione = nome(2)
    DoEvents
    handle = FreeFile
    Open "C:\" & nome(1) For Binary As handle
    DoEvents
    w.SendData "ack"
    
    
    End If
    End Sub
    
    Private Sub w2_ConnectionRequest(ByVal requestID As Long)
    w2.Close
    w2.Accept requestID
    End Sub
    
    Private Sub w2_DataArrival(ByVal bytesTotal As Long)
    On Error GoTo fine
    Dim data() As Byte
    w2.GetData data
    
    Put handle, , data
    List1.AddItem LOF(handle)
    
    If UBound(data) + LOF(handle) >= dimensione Then
    Close handle
    w.SendData "fine"
    End If
    
    fine:
    If Err.Number = 52 Then
    End If
    
    End Sub

  8. #8
    Ho provato a gestire quell'errore nella sub in cui mi da il problema:

    On error goto fine

    tutto il codice che invia




    fine:
    if err.number=10055 then
    w2.sendata dati
    end if

    Ma niente, come credevo mi da ancora lo stesso errore.

  9. #9
    Ho risolto il problema, riscrivendo da capo un codice nuovo ed ora funziona tutto.

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.