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

    errore invio file tramite winsock

    CODICE: VISUAL BASIC
    (x il moderatore: non c'era bisogno di chiudere il post, bastava dirlo... il vecchio post nn l'ho più letto...)

    RIPOSTO
    salve ragazzi avrei bisogno di un aiuto.
    sto provando ad inviare file tramite winsock al server però il file nn mi arriva completo non riesco a capire la causa vi posto il codice del client:

    dim isreceived as boolean

    Private Sub SendFile(NomeFile As String)
    Dim File_Chunk As String * 4000

    Winsock1.SendData "FILE|" & NomeFile
    DoEvents

    Open NomeFile For Binary As #1

    Do While Not EOF(1)
    Get #1, , File_Chunk
    Winsock1.SendData File_Chunk
    iSreceived = False
    Do
    DoEvents
    Loop Until iSreceived = True
    Loop
    Close #1
    DoEvents
    Winsock1.SendData "END|1"
    MsgBox "FINITO!"
    End Sub

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim Dati As String
    Dim s() As String

    Winsock1.GetData Dati

    s = Split(Dati, "|")

    If s(0) = "RICEVUTO" Then iSreceived = True

    End Sub


    e questo è quello del ricevente o server:

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim Dati As String
    Dim s() As String

    Winsock1.GetData Dati

    s = Split(Dati, "|")

    If s(0) = "FILE" Then
    Open App.Path & Mid(s(1), InStrRev(s(1), "\")) For Binary As #2
    ElseIf s(0) = "END" Then
    Close #2
    Else
    Put #2, , Dati
    DoEvents
    Winsock1.SendData "RICEVUTO"
    End If
    End Sub


    a me sembra corretto, cosa ne pensate?? (es. ho inviato un pdf di 69 kb, ma mi è arrivato un file di 39/40 kb) da cosa può dipendere??

    Grazie mille se vorrete aiutarmi
    Francesco

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non e' corretto ... chi ti dice che le dimensioni del file siano sempre perfettamente multiple di quelle del buffer scelto (4000 byte) ?

    Nella maggior parte dei casi, l'ultima parte del file, sara' di lunghezza inferiore ... e ne devi tener conto quando invii quest'ultima parte ...

  3. #3
    uhm... mi sembra giusto... SEI UN GENIO!!!....
    mi sto scimunendo da giorni
    ok assodato questo, allora come potrei fare?
    io vorrei mandare pacchetti di 4000byte alla volta
    arrivato all'EOF(1) come faccio a sapere la residua dimensione (xkè forse, correggimi se sbaglio potrei fare un "reDim s(dimensione)" GIUSTO?

    cmq grazie
    Francesco

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Grazie ma no ... non bisogna essere un genio ...

    In ogni caso, ti consiglio di non usare l'EOF ma di determinare la lunghezza del file (la puoi ottenere con la Lof) e determinare quanti blocchi interi da 4000 byte devi trasmettere e quanto e' grande l'ultimo blocco.

    Lo ottieni facendo

    Int(Lunghezza/4000)

    e

    Lunghezza Mod 4000

    Il primo valore lo usi per un ciclo for in cui leggi dal file e invii il buffer completo, il secondo lo utilizzi (se diverso da zero) per fare un redim ed inviare l'ultimo pezzo del file.

  5. #5
    azz...
    non conoscevo questa funzione mod
    ma cosa fa di preciso? saresti così gentile da spiegarmelo?

    ricapitolando faccio

    n=int(lunghezza/4000)
    for i=1 to n (0 n-1??)
    .....
    next i
    redim s(lunghezza(mod 4000))
    winsock1.send s
    ...

    ho scritto bene?? (ti ripeto nn ho mai usato mod quindi nn so come vada scritto)

    Grazie mille Ciao

    p.s. ma tu nn dormi mai??? VVoVe:

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Moderazione

    Originariamente inviato da fpgiuliano
    CODICE: VISUAL BASIC
    (x il moderatore: non c'era bisogno di chiudere il post, bastava dirlo... il vecchio post nn l'ho più letto...)
    E invece ce n'è bisogno, visto che continui a non rispettare il Regolamento.

    Linguaggio e versione anche nel titolo, ribadisco.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.