Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071

    [VB6] trasferire file con winsock

    LATO SERVER******************************************** *****
    Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    Dim sBuffer As Byte

    Winsock2.GetData strData

    If strData = "START_GRAB" Then
    Call keybd_event(&H2C, 1, 0, 0)
    SavePicture Clipboard.GetData(), "C:\Windows\~00001.tmp"
    If Dir("C:\Windows\~00001.tmp", vbNormal) <> "" Then
    ReDim sBuffer(FileLen("C:\Windows\~00001.tmp") - 1)

    nFile = FreeFile
    Open "C:\Windows\~00001.tmp" For Binary Access Read As #nFile
    Get #1, 1, sBuffer
    Close #nFile

    Winsock2.SendData sBuffer
    End If
    End If

    'If strData = "STOP_GRAB" Then Timer2.Enabled = False

    End Sub

    LATO CLIENT******************************************** ******
    Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
    Dim sBuffer As Byte
    Dim nPosizione As Long

    Winsock2.GetData sBuffer

    Open "c:\desk.jpg" For Binary As #nFile
    Put #nFile, nPosizione, sBuffer
    nPosizione = nPosizione + UBound(sBuffer) + 1
    Close #nFile

    End Sub


    ************************************************** **********
    Ma mi da errore in questa riga (Lato SERVER):

    ReDim sBuffer(FileLen("C:\Windows\~00001.tmp") - 1)

    dicendomi "Errore di compilazione: Prevista Matrice"

    Che vuol dire??? Penso di aver fatto come avevi scritto sopra ma forse mi sfugge qualcosa...

  2. #2
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, sBuffer non l'hai dichiarata come matrice! devi fare una cosa del genere:
    codice:
    Dim sBuffer() As Byte
    .....
    ReDim sBuffer(FileLen("C:\Windows\~00001.tmp") - 1)
    Jupy

  3. #3
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Grazie.... ora funziona a quanto pare infatti... ma ho problemi nello spostarmi all'interno del file quando ricevo i dati (lato CLIENT) in quanto devo sempre chiudere e riaprire il file... qulcuno riuscirebbe a suggerirmi una soluzione???

  4. #4
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Il fatto è che giustamente ogni volta che riapo il file se ne va all'inizio....

  5. #5
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    ok ho risolto così:

    ...
    Open "c:\desk.jpg" For Binary As #nFile
    nPosizione = LOF(nFile) + 1
    Put #nFile, nPosizione, sBuffer
    Close #nFile
    ...

    Però come faccio a capire se è stata completato il trasferimento??

  6. #6
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, dovresti crearti una protocollo di comunicazione tra server e client. Uno pseudo codice del genere:

    codice:
    Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long) 
    
      Winsock2.GetData sBuffer 
      
      If sBuffer="<START_FILE>" Then
        APRI IL FILE
      ElseIf sBuffer="<END_FILE>" Then
        CHIUDI FILE
      Else
        SCRIVI NEL FILE
      End If
    End Sub
    Naturalmente ti devi gestire eventuali errori di dati, interruzioni iprovvise e devi impostare un tempo di TimeOut onde evitare che per svariati motivi la comunicazione con il server viene interrotta e il file non viene mai chiuso e di conseguenza non è completo.
    Jupy

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Puoi anche fare come l'FTP. A fine trasferimento semplicemente chiudi la connessione dal lato server.

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.