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

    [VB6] Ricezione dati sia binari che stringa con il componente WinSock

    Ho una app per Android che invia dei dati che possono essere sia delle stringhe (ca 50 byte) che dei dati binari (ca 3 MB, sono dei documenti PDF).
    Il mio codice VB6 utilizza il componente winsock per ricevere (con il wifi ed un IP statico) questi dati sul PC ; provengono da un tablet Android.
    Mentre non c'e' problema per la ricezione dei dati stringa quelli binari sono ricevuti a blocchi di 8192 byte per cui mi e' impossibile assemblarli in un unico file PDF.
    Ecco uno spezzone che c'e' nella sub wsClients_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    codice:
    Dim data(5000000) As Byte
       wsClients(Index).GetData data, vbByte
       Dim i As Integer
       If bytesTotal < 100 Then
          For i = 0 To bytesTotal - 1
             Ric = Ric & Chr$(data(i))
          Next i
          Debug.Print Ric  '--- la ricezione della stringa � OK
       Else
          '--- il dato binario invece .....
          F = FreeFile
          Open App.Path & "\aaaaaa.pdf" For Binary Access Write As #F
          Put #F, , data()
          Close #F
       End If
    Si puo' risolvere questo problema ? E come ?
    Grazie per l'attenzione.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Che vuol dire "ti è impossibile assemblare ..."?

    Quella dichierazione di 5 MB circa di byte

    Dim data(5000000) As Byte

    mi sembra che non abbia senso.

    Devi modificare il codice in modo che, quando inizia a ricevere il pdf, apre il file pdf e comincia a scrivere e ogni volta che riceve i byte li accoda.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    L'istruzione con il 5000000 fa parte dei miei tentativi per risolvere il mio problema.
    Se fosse il file di testo non avrei problemi ad utilizzare l'istruzione FOR APPEND ma è un binario e non mi sembra che l'append sia previsto.
    Ho notato che la sub wsClients_DataArrival viene lanciata 437 volte e ogni volta vengono inviati 8192 byte. Ciò corrisponde a circa 3.5 MB che è appunto l'occupazione del file PDF di cui tento la ricezione. Sotto questo aspetto i conti tornano, ma non ho risolto il problema.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Devi modificare il codice in modo che la Open del file binario venga eseguita solo la prima volta che viene ricevuto il blocco di dati binari e che il file sia lasciato aperto man mano che i pezzi arrivano, così che le varie Put possano accodare i dati. Solo alla fine chiudi il file.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Grazie. Ho modificato il codice nel senso da te indicato., anche se non è così semplice in quanto devo ricevere sia dei dati testuali (che devo interpretare correttamente) sia dei dati binari (che allo stesso modo devo interpretare correttamente). E distinguere i primi dai secondi non è così banale, ma ci sto riuscendo.

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