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

    Trasferimento File con Winsock

    Ciao a tutti.
    Mi è sorta la necessita di trasferire tramite il Winsock un file jpg.
    Qualcuno potrebbe dirmi che codice devo usare??
    Per trasmettere un testo scrivo questo:

    Connessione.SendData Testo.Text

    e così lo ricevo:

    Private Sub Connessione_DataArrival(ByVal bytesTotal As Long)
    Dim Messagio As String
    Connessione.GetData Messagio, vbString
    MsgBox ("L'utente ha scritto: " & Messagio)
    End Sub


    Qualcuno potrebbe darmi una mano a produrre il codice per il trasferimento di un jpg?? Grazie Ciao Ciao!!!

    PS: Qualcuno potrebbe indicarmi se c'è e come si usa un buon controllo per fare le anteprime di file immagini e che permette il DRAG e DROP.
    Paperina :-)

  2. #2
    forse potresti fare così:

    quando fai scegliere all'utente (mittente) il file da inviare invii dall'altra parte (destinatario) una variabile stringa del tipo IMM_ONnome_immagine.jpgIMM_ON...

    dalla parte del destinatario interpreti la stringa invece che inviarla a video mediante una msgbox e ti apri un file in modalità binaria con il nome del file uguale alla stringa da te inviata senza i caratteri IMM_ON avanti e dietro (in questo caso nome_immagine.jpg)

    dalla perte del mittente invii la tua immagine come un semplice file binario fino alla fine.....alla fine (se il file è finito) invii la stringa IMM_OFFnome_immagine.jpgIMM_OFF questo farà capire al destinatario che l'immagine è stata inviata..

    ora non ti rimane nient'altro che chiudere il file e magari far apparire una msgbox con scritto "immagine inviata" dalla parte del mittente ed "immagine ricevuta" dalla parte del destinatario...

    PS
    non ho mai provato il mio metodo e quindi stò andando "a naso"...fai tu delle prove e se funzia posta il codice, ciao
    Let's your dream came true!

  3. #3
    Allora io avevo pensato a fer una cosa così:

    open "nomefileorigine" for binary as #1
    open "nomefiledestinazione" for binary as #2
    dim dati as long
    do while not eof(1)
    get #1,,dati
    put #2,,dati
    loop


    Questo codice eseguito in locale funziona perfettamente (Solo che non so chiudere poi il file, ma funziona)

    Lo stesso codice, realizzato nella trasmissione tramite il winsok non funziona!!! Chi mi saprebbe aiutare???

    Ale500, grazie il tuo è un buon suggerimento, solo che quello che a me serve è proprio l'atto di spedire il file, è quello che non so fare
    Paperina :-)

  4. #4
    se mi dici che il tuo codice in locale funziona allora ci sono buone possibilità che il mio funzi con winsock....

    acolta bene quello che ti dico:
    1. per chiudere il file basta che metti close #n dove n è il numero del file da chiudere in questo caso per chiuderli tutti e 2 basta che metti close e basta

    2. il locale ti funzia perchè tu hai il controllo della macchina e sei tu a decidere (sullo stesso PC) dove prendere il file e dove metterlo...con winsock non può funzionare poichè non hai il controlo dell'altra macchina e quindi se ad esempio scrivi come destinazione c:\win\ale te lo copia nella tua cartella...questo perchè tu non spedisci i dati con il tuo metodo ma li elabori ancora in locale

    ora ho un po di tempo e provo a buttare giù 2 righe di codice...se rileggi però la mia risposta misembra di essere stato abbastanza chiaro....no????
    Let's your dream came true!

  5. #5
    Si, adesso sei stato piu chiaro, scusa se non ho capito ma non sono gran che esperto di VB.

    Ho provato a fare quello che ho scritto prima nel controllo winsok....su di un file di testo funziona, ma trasferisce solo i primi 4 caratteri, mentre un file immagine è tutto nero!!!

    Credo che nn funziona il ciclo, cioè che legge solo il primo trasfermento.
    Paperina :-)

  6. #6
    adesso stò facendo delle prove finito ti posto il codice
    Let's your dream came true!

  7. #7
    Se ti puo aiutare questo è il codice che ho scritto io:
    Logicamente dovrebbe funzionare, in pratica non funziona e non capisco il motivo!!! Te forse ci capisci qualche cosa il più e magari ti aiuta:


    Client:
    ----------------------------------------------------
    Private Sub Form_Load()
    Winsock1.Connect (Winsock1.LocalHostName)
    Dim dati As Long
    End Sub

    Private Sub Winsock1_Close()
    Winsock1.Close
    Winsock1.Connect (Winsock1.LocalHostName)
    End Sub

    Private Sub Winsock1_Connect()
    MsgBox "connesso"
    Open "c:\immagine1.bmp" For Binary As #1
    Do While Not EOF(1)
    Get #1, , dati
    Winsock1.SendData dati
    Loop
    Close #1
    End Sub

    -----------------------------------------------------------

    Server:
    ------------------------------------------------------------

    Private Sub Form_Load()
    Open "c:\ricevuta.bmp" For Binary As #1
    Dim dati As Byte
    Winsock1.Listen
    End Sub

    Private Sub Form_Terminate()
    Winsock1.Close
    Close #1
    End Sub

    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    Winsock1.Accept requestID
    End Sub

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Winsock1.GetData (dati)
    Put #1, , dati
    End Sub

    ------------------------------------------------------------

    PS: Grazie mille per l'aiuto che mi stai dando!!!
    Ah, approposito ma il tuo numero icq è sbagliato??? Il mio è 171012994
    Paperina :-)

  8. #8
    ho provato una cosa del genere....è solo codice che ho buttato giù (a naso) non provato:

    [supersaibal]
    Public immagine As Boolean
    Public percorso As String

    Private Sub Command1_Click()
    Connessione.SendData Testo.Text
    End Sub

    Private Sub Connessione_DataArrival(ByVal bytesTotal As Long)
    Dim Messaggio As String
    Dim Verifica As String * 7
    Connessione.GetData Messaggio, vbString
    Verifica = Messaggio
    If Verifica = ":IMM_ON" Then immagine = True
    If immagine = False Then
    MsgBox ("L'utente ha scritto: " & Messaggio)
    Else
    Call ricevi(Messaggio)
    End If
    End Sub

    Public Sub ricevi(str As String)
    Dim scrivin As Long
    Dim apri As String * 7
    Dim file As String
    Dim Nfile As Integer
    Nfile = FreeFile
    apri = str
    If apri = ":IMM_ON" Then
    file = Mid(str, 8)
    Open file For Binary As #Nfile
    ElseIf apri = ":IMMOFF" Then
    Close
    immagine = False
    Else
    scrivi = CLng(str)
    Put #Nfile, , scrivi
    End If
    End Sub

    Private Sub Form_Load()
    immagine = False
    End Sub

    Private Sub mnuImmagine_Click()
    'azeramento variabile percorso
    percorso = ""
    ' Imposta CancelError su True.
    CommonDialog1.CancelError = True
    On Error GoTo ErrHandler
    ' Imposta i flag.
    CommonDialog1.Flags = cdlOFNHideReadOnly
    ' Imposta i filtri.
    CommonDialog1.Filter = "Immagine JPG (*.JPG)|*.jpg|Immagine BMP (*.bmp)|*.bmp|Immagine GIF (*.gif)|*.gif"
    ' Specifica il filtro predefinito.
    CommonDialog1.FilterIndex = 1
    ' Visualizza la finestra di dialogo Apri.
    CommonDialog1.DialogTitle = "Scegli una immagine:"
    CommonDialog1.ShowOpen
    ' Visualizza il nome del file selezionato nella text e lo memorizza nella variabile
    percorso = CommonDialog1.FileName
    Call invia(percorso)
    Exit Sub
    ErrHandler:
    'L'utente ha scelto il pulsante Annulla.
    Exit Sub
    End Sub

    Public Sub invia(per)
    Dim Nfile As Integer
    'Connessione.SendData ":IMM_ON" & per
    Nfile = FreeFile
    Open percorso For Binary As #Nfile
    Dim dati As Long
    Do While Not EOF(1)
    Get #Nfile, , dati
    Connessione.SendData dati
    Loop
    Close
    Connessione.SendData ":IMMOFF"
    End Sub

    [/supersaibal]

    fai delle prove magari con il debug seguendo passo passo i valori e vedi cosa ti da...

    PS
    la mia mail ! se il tuo progetto non è così Top Secret me lo potresti inviare magari in una file zip almeno potrei fare anche io delle prove per risolvere il tuo problema..?????

    PPS
    per quanto riguarda il mio ICQ non vado mai in Chat...il numero 166 10 10 10 non ti dice niente??
    Let's your dream came true!

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.