Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Trasferire velocemente file con windosock
Forum - Visual Basic 6 - Trasferire velocemente file con windosock

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Giangi_007 (Normal User)
Newbie


Messaggi: 5
Iscritto: 05/05/2007

Segnala al moderatore
Postato alle 17:34
Sabato, 05/05/2007
Ciao a tutti!
E' da un po(da un bel po) che programmo cavolatine in vb. Ho creato un prog che invia file da pc a pc, solo che va lento e non sfrutta tutta la banda disponibile, quindi chiedo qualche suggerimento o consiglio su come inviare file piu velocemente. La mia idea è questa, solo che non riesco a realizzarla:
Ci sono 2 file vb project, una per il server e l'altra per il client. Ci sono 3 controlli winsocks per ogni progetto: uno per la connessione e l'invio della richiesta file che l'ho chiamata Connessione, e gli altri due per mandare le due parti di file. Infatti voglio che il file prima di essere mandato venga diviso in due parti e mandato dai corrispondenti socks che si chiamano A e B. Quando il pc server ha ricevuto i file il programma li deve riunire nell' ordine originale. Mi potete dare una mano a separare e a riunire i file please? Grazie mille. :)

PM Quote
Avatar
motoboy (Ex-Member)
Pro


Messaggi: 152
Iscritto: 05/04/2007

Segnala al moderatore
Postato alle 17:45
Sabato, 05/05/2007
Testo quotato

Postato originariamente da Giangi_007:

Ciao a tutti!
E' da un po(da un bel po) che programmo cavolatine in vb. Ho creato un prog che invia file da pc a pc, solo che va lento e non sfrutta tutta la banda disponibile, quindi chiedo qualche suggerimento o consiglio su come inviare file piu velocemente. La mia idea è questa, solo che non riesco a realizzarla:


Testo quotato

Ci sono 2 file vb project, una per il server e l'altra per il client. Ci sono 3 controlli winsocks per ogni progetto: uno per la connessione e l'invio della richiesta file che l'ho chiamata Connessione, e gli altri due per mandare le due parti di file.


infatti senza un Client e un Server non puoi mandare i files da un pc ad un altro. ;)
E' una logica!
Testo quotato


Infatti voglio che il file prima di essere mandato venga diviso in due parti e mandato dai corrispondenti socks che si chiamano A e B.


Infatti quando viene inviato un file da Client a Server, ha già una funzionalità implementata nel contesto Logico, dove i files vengono suddivisi in bytes e vengono inviati pian piano a pacchetto a pacchetto.
Testo quotato


Quando il pc server ha ricevuto i file il programma li deve riunire nell' ordine originale.


questo già accade..
Testo quotato

Mi potete dare una mano a separare e a riunire i file please? Grazie mille. :)



Posta il codice che usi e noi ti diamo il ditino..

PM Quote
Avatar
Giangi_007 (Normal User)
Newbie


Messaggi: 5
Iscritto: 05/05/2007

Segnala al moderatore
Postato alle 13:03
Domenica, 06/05/2007
Scusa ma forse non mi sono spiegato bene, scusami :(. Io ho gia creato un programma ke invia file da pc a pc però la velocità è lenta, nn supera gli 8 KB/ps! Quindi voglio modificare il progetto in modo da dividere il file da inviare a metà, mandare al server le due parti contemporaneamente e riunirle come sono nell'originale. La mia domanda è questa: come divido il file e come faccio poi a riunirlo? :) Grassie

PM Quote
Avatar
c.ronaldo (Normal User)
Expert


Messaggi: 577
Iscritto: 01/02/2007

Segnala al moderatore
Postato alle 13:41
Domenica, 06/05/2007
Intanto posta il codice come ha detto motoboy;)

PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 14:12
Domenica, 06/05/2007
gli dai un ordine.
Al primo pacchetto gli aggiungi come prima lettera 1 al secondo 2 ecc

Edit: megli usare tre lettere 001,002 altrimenti potrai inviare ben pochi pacchetti8-|

Ultima modifica effettuata da P4p3r0g4 il 06/05/2007 alle 14:12
PM Quote
Avatar
Giangi_007 (Normal User)
Newbie


Messaggi: 5
Iscritto: 05/05/2007

Segnala al moderatore
Postato alle 14:14
Domenica, 06/05/2007
Vi dico in anticipo che alcune cose le ho prese da un file sorgente( nn ricordo quale sito) cmq ecco il codice:
Codice sorgente - presumibilmente VB.NET

  1. '''''''''''''''''''CODICE CLIENT'''''''''''''''
  2. Private Sub Connetti_Click() ' il tasto di connessione al server
  3. Select Case Connetti.Caption
  4.     Case "Connetti"
  5.     If Socket.State <> sckClosed Then Socket.Close
  6.     Socket.LocalPort = 0
  7.     Socket.Connect IndirizzoIP.Text, Port.Text
  8.     w.LocalPort = 0
  9.     w.Connect IndirizzoIP.Text, Port.Text + 1
  10.     Connetti.Caption = "Disconnetti"
  11.     Case "Disconnetti"
  12.     Socket.Close
  13.     w.Close
  14.     Connetti.Caption = "Connetti"
  15. End Select                           ' il socket w non centra niente con l'invio del file, serve per altre cose di abbellimento.
  16. End Sub
  17.  
  18. Private Sub Invia_Click()    ' questo invia la richiesta al server del file da mandare, includendo tutte le informazioni del file (/file nome dimensione)
  19.     Dim POSIZIONE As Integer
  20.     If Socket.State <> sckConnected Then Exit Sub
  21.     If Dir(NomeFile.Text) = "" Then
  22.         MsgBox "Il file non esiste!", vbCritical + vbOKOnly
  23.     Else
  24.         POSIZIONE = 0
  25.         While InStr(POSIZIONE + 1, NomeFile.Text, "\") > 0
  26.             POSIZIONE = InStr(POSIZIONE + 1, NomeFile.Text, "\")
  27.         Wend
  28.         Socket.SendData "/FILE " & Mid(NomeFile.Text, POSIZIONE + 1) & " " & FileLen(NomeFile.Text)
  29.     End If
  30. End Sub
  31.  
  32. Private Sub SocketInvio_Connect()   'il server accetta il file e manda le informazioni della nuova connessione per inviare il file, e quando il client riceve le info si connette e apre il file in binario
  33.     Dim DATI(511) As Byte
  34.     FILEHANDLE = FreeFile
  35.     Open NomeFile.Text For Binary As FILEHANDLE
  36.     Get FILEHANDLE, , DATI
  37.     SocketInvio.SendData DATI
  38.     Call getsockopt(SocketInvio.SocketHandle, SOL_SOCKET, SO_SNDBUF, DIMENSIONEPACCHETTO, Len(DIMENSIONEPACCHETTO))
  39.     If DIMENSIONEPACCHETTO = 0 Then DIMENSIONEPACCHETTO = Text1.Text
  40. End Sub
  41.  
  42. Private Sub Socket_DataArrival(ByVal bytesTotal As Long) ' il file ovviamente viene diviso in pacchetti e quando il server ne riceve uno invia la richiesta del successivo. Finiti i pacchetti il socket si disconnette.
  43.     Dim DATI() As Byte
  44.     Dim comando As String
  45.     Call Socket.GetData(DATI)
  46.     Socket.GetData comando
  47.     DATI = StrConv(DATI, vbUnicode)
  48.     If Left(DATI, 11) = " +OK: PORTA" Then
  49.         If SocketInvio.State <> sckClosed Then SocketInvio.Close
  50.         SocketInvio.LocalPort = 0
  51.         SocketInvio.Connect Socket.RemoteHostIP, Mid(DATI, 12)
  52.     End If
  53.     If (Left(DATI, 10) = " +OK: RECV") Then
  54.         If FILEHANDLE <> 0 Then
  55.             DATI = Space(DIMENSIONEPACCHETTO / 2)
  56.             Get FILEHANDLE, , DATI
  57.             SocketInvio.SendData DATI
  58.         End If
  59.     End If
  60.     If (Left(DATI, 10) = " +OK: FINE") Then
  61.         Close FILEHANDLE
  62.         SocketInvio.Close
  63.         MsgBox "Trasferimento completato!", vbInformation + vbOKOnly
  64.     End If
  65.    
  66. End Sub
  67.  
  68. ''''''''''''''CODICE SERVER''''''''''''''''''
  69. Private Sub Socket_DataArrival(ByVal bytesTotal As Long) ' il server intanto se ne sta li buonino buonino a salvare i pacchetti ricevuti nel nuovo file aperto sempre in binario
  70.     Dim DATI() As Byte
  71.     Dim NOMEFILE As String
  72.     Dim DIMENSIONE As Long
  73.     Dim POSIZIONE As Integer
  74.     Dim TEMPSTR As String
  75.  
  76.     Call Socket.GetData(DATI)
  77.     DATI = StrConv(DATI, vbUnicode)
  78.     Select Case Left(UCase(DATI), 5)
  79.         Case "/FILE"
  80.             ' I files sono mandati nella forma:
  81.             ' /FILE NOME DIMENSIONE
  82.             ' possono contenere anche spazi:
  83.             ' /FILE NOME DEL FILE DIMENSIONE
  84.             TEMPSTR = Mid(DATI, 7)
  85.             POSIZIONE = 0
  86.             While InStr(POSIZIONE + 1, TEMPSTR, " ") > 0
  87.                 POSIZIONE = InStr(POSIZIONE + 1, TEMPSTR, " ")
  88.             Wend
  89.             ' POSIZIONE conterrà il punto dove inizia la dimensione
  90.             NOMEFILE = Left(TEMPSTR, POSIZIONE - 1)
  91.             DIMENSIONE = CLng(Mid(TEMPSTR, POSIZIONE + 1))
  92.             TEMPSTR = "È in arrivo un file di nome " & NOMEFILE & " di " & CStr(DIMENSIONE) & " bytes."
  93.             TEMPSTR = TEMPSTR & vbNewLine
  94.             TEMPSTR = TEMPSTR & "Desideri accettarlo?"
  95.             If MsgBox(TEMPSTR, vbYesNo + vbQuestion) = vbYes Then
  96.                 FILEDASALVARE = App.Path & "\RICEVUTI\" & NOMEFILE
  97.                 If Dir(FILEDASALVARE) <> "" Then
  98.                     TEMPSTR = "Il file " & NOMEFILE & " esiste già." & vbNewLine
  99.                     TEMPSTR = TEMPSTR & "Desideri sovrascriverlo?"
  100.                     If MsgBox(TEMPSTR, vbYesNo + vbQuestion) = vbYes Then
  101.                         Kill FILEDASALVARE
  102.                     Else
  103.                         ' Chiedi di cambiare il nome o fare altro...
  104.                         ' Noi lo rifiuteremo...
  105.                         Socket.SendData " -ERR: NONACCETTATO" & vbNewLine
  106.                         Stati.AddItem "File " & NOMEFILE & " rifiutato."
  107.                            
  108.                         Exit Sub
  109.                     End If
  110.                 End If
  111.                 DIMENSIONEFILE = DIMENSIONE
  112.                 If Passivo.State <> sckClosed Then Passivo.Close
  113.                 Passivo.LocalPort = 0
  114.                 Passivo.Listen
  115.                 Socket.SendData " +OK: PORTA " & Passivo.LocalPort & vbNewLine
  116.                 Stati.AddItem "Accettazione del file " & NOMEFILE
  117.                 Stati.AddItem "Ascolto sulla porta " & Passivo.LocalPort
  118.                 StatoLabel.Caption = "Ricezione del file " & NOMEFILE & " di " & DIMENSIONE & " bytes."
  119.                 Avanzamento.Caption = "0 bytes ricevuti su " & DIMENSIONE
  120.                 AvanzamentoProgress.Value = 0
  121.                 AvanzamentoProgress.Max = 0
  122.             Else
  123.                 Socket.SendData " -ERR: NONACCETTATO" & vbNewLine
  124.                 Stati.AddItem "File " & NOMEFILE & " rifiutato."
  125.             End If
  126.         Case "/FINE"
  127.             Passivo.Close
  128.             Close FILEHANDLE
  129.             FILEDASALVARE = ""
  130.             FILEHANDLE = 0
  131.             Stati.AddItem "Ricezione del file completata."
  132.            
  133.     End Select
  134.        
  135. End Sub
  136.  
  137. Private Sub Passivo_DataArrival(ByVal bytesTotal As Long)
  138.     Dim DATI() As Byte
  139.     TuttiBytes.Text = TuttiBytes.Text + Passivo.BytesReceived
  140.     Call Passivo.GetData(DATI)
  141.     If UBound(DATI) + LOF(FILEHANDLE) + 1 >= DIMENSIONEFILE Then
  142.         ReDim Preserve DATI(DIMENSIONEFILE - LOF(FILEHANDLE) - 1)
  143.         Put FILEHANDLE, , DATI
  144.         Avanzamento.Caption = LOF(FILEHANDLE) & " bytes ricevuti su " & DIMENSIONEFILE
  145.         AvanzamentoProgress.Max = DIMENSIONEFILE
  146.         AvanzamentoProgress.Value = LOF(FILEHANDLE)
  147.         Socket.SendData " +OK: FINE"
  148.         DoEvents
  149.         Passivo.Close
  150.         Close FILEHANDLE
  151.         FILEDASALVARE = ""
  152.         Stati.AddItem "Ricezione del file completata."
  153.     Else
  154.         Put FILEHANDLE, , DATI
  155.         Avanzamento.Caption = LOF(FILEHANDLE) & " bytes ricevuti su " & DIMENSIONEFILE
  156.         AvanzamentoProgress.Max = DIMENSIONEFILE
  157.         AvanzamentoProgress.Value = LOF(FILEHANDLE)
  158.         Socket.SendData " +OK: RECV " & LOF(FILEHANDLE)
  159.     End If
  160.        
  161. End Sub



Qui ho messo l'essenziale del mio programmino, poi ci sono tutte le cose di abbellimento e funzioni extra.

Adesso potete rispondermi alla domanda please?

PM Quote
Avatar
Giangi_007 (Normal User)
Newbie


Messaggi: 5
Iscritto: 05/05/2007

Segnala al moderatore
Postato alle 14:18
Domenica, 06/05/2007
Scusami P4p3r0g4 non avevo letto il tuo post.
cmq:
Siccome sui file non ho molta esperienza non so come leggere tutte le righe, separarle (es. se sono 100 rige faccio 50 e 50) e poi salvarle in due file temporanei. Come faccio?
:-? :)

Ultima modifica effettuata da Giangi_007 il 06/05/2007 alle 14:22
PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 15:03
Domenica, 06/05/2007
per sapere la lunghezza basta usare len(stringa) che ti da la lungezze in stringhe poi puoi dividere tutto in quanto ti pare cin varie funzioni (dipende da cosa esattamente vuoi fare..)

PM Quote
Avatar
Giangi_007 (Normal User)
Newbie


Messaggi: 5
Iscritto: 05/05/2007

Segnala al moderatore
Postato alle 15:14
Domenica, 06/05/2007
Ok piu o meno ci sono, un'ultima cosa: come faccio a leggere tutte le stringhe di un intero file e assegnarle ad una variabile per poi dividerle? :)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo