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 - Invio dei files definitivo!
Forum - Visual Basic 6 - Invio dei files definitivo!

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
acromangelo@libero.it (Normal User)
Rookie


Messaggi: 21
Iscritto: 23/03/2008

Segnala al moderatore
Postato alle 22:43
Lunedì, 19/05/2008
Ho provato in qualsiasi modo possibile immaginabile a sfruttare il winsock per l'invio dei files ma niente ogni volta la stessa cosa....

mentre nel client ( quello ke invia ) l'ipotetica barra di scorrimento finisce subito comunicandomi dell'avvenuto invio del file ( circa 2 secondi ) nel server la barra sta ancora andando e cioè il file non è ancora arrivato!

per spiegarmi meglio vedo la lucetta del mio router che continua a lampeggiare quindi sta trasferendo byte ma nel programma mi dice che ha già finito

tipo questo codice:
Codice sorgente - presumibilmente VB.NET

  1. Public Function Send_File(FileToSend As String)
  2. Dim temp As String, inviati As Double, completo As Double, BlockSize As Long
  3.  
  4. Open FileToSend For Binary Access Read As #1
  5.  
  6. Label4.Caption = "Invio del file in corso..."
  7. BlockSize = 2048
  8. completo = LOF(1)
  9. inviati = completo / 2048
  10.  
  11. Do While Not EOF(1)
  12.  
  13. temp = Space$(BlockSize)
  14. Get 1, , temp
  15. Winsock1.SendData temp
  16.  
  17. barrainvio.Max = completo
  18. barrainvio.Min = 0
  19. If (barrainvio.Value + 2048) < completo Then
  20. barrainvio.Value = barrainvio.Value + 2048
  21. ElseIf barrainvio.Value = completo Then
  22. barrainvio.Value = completo
  23. ElseIf (barrainvio.Value + 2048) > completo Then
  24. barrainvio.Value = completo
  25. End If
  26. DoEvents
  27. Loop
  28. Close #1
  29. DoEvents
  30.  
  31. Sleep (1000)
  32. Winsock1.SendData "xx"
  33. Label4.Caption = "Invio del file completato con successo!"
  34. Text3.Text = ""
  35. Command3.Caption = "Invia la richiesta"
  36.  
  37. End Function



questa l'ho fatta io

se volete potete usarla..funziona ma come vi ho detto la barra finisce subito e mi viene fuori file inviato! invece lo sta ancora trasferendo.

un aiuto su come sincronizzare l'effettivo trasferimento con il programma?

EDIT: volevo dire anche che a causa di quest problema l'ultimo comando per la chisura del file non arriva mai...e quindi il programma nn chiuderà mai il file...sempre a causa che il client lo invia dopo 2 secondi invece il ricevente dovrebbe ricevere questo comando dopo 30 sec ( dico cosi per fare un esempio ) quindi succede ciò che ho detto

Vi ringgrazio se saprete aiutarmi
ciao

Ultima modifica effettuata da acromangelo@libero.it il 19/05/2008 alle 22:54
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 23:49
Lunedì, 19/05/2008
Se non ho capito male il problema lo hai nel codice che riceve ... ma non l'hai mostrato ...

PM Quote
Avatar
acromangelo@libero.it (Normal User)
Rookie


Messaggi: 21
Iscritto: 23/03/2008

Segnala al moderatore
Postato alle 14:59
Martedì, 20/05/2008
il codice che riceve è questo:
Codice sorgente - presumibilmente VB.NET

  1. Dim temp As String, data As String, dati() As String, richiesta As String, kilob() As String, kilobyte As Double
  2.  
  3. Winsock1.GetData data 'Get the data
  4. temp = data
  5.  
  6. If InStr(temp, "///DATIFILE") Then
  7. ricevuti = 0
  8. dati = Split(temp, "|")
  9. dimensione.Caption = dati(2)
  10. nomefile.Caption = dati(1)
  11. accettare.Visible = True
  12. si.Visible = True
  13. no.Visible = True
  14. kilobyte = dati(2) / 1024
  15. If InStr(kilobyte, ",") Then
  16. kilob = Split(kilobyte, ",")
  17. Label3.Caption = kilob(0) & " Kb"
  18. Else
  19. Label3.Caption = kilobyte & " Kb"
  20. End If
  21. Text4.Text = App.Path
  22.  
  23. ElseIf temp = "xx" Then
  24. Close #2
  25. FileOpen = False
  26. barraricezione.Value = 0
  27. Label4.Caption = "Ricezione del file completato con successo!"
  28. barraricezione.Visible = False
  29.  
  30. ElseIf temp = "Paaaaaaaaaarti" Then
  31. Label4.Caption = "Richiesta accettata, premi Invia per inviare"
  32. Command3.Caption = "Invia il file"
  33. barrainvio.Value = 0
  34.  
  35. ElseIf InStr(temp, "$messaggio") Then
  36. messaggio = Replace(temp, "$messaggio ", "")
  37. If Text5.Text = "" Then
  38. Text5.Text = "--> " & messaggio
  39. Else
  40. Text5.Text = Text5.Text & vbCrLf & "--> " & messaggio
  41. Text5.SelStart = Len(Text5.Text)
  42. End If
  43.  
  44. ElseIf temp = "Non accetto il file" Then
  45. Label4.Caption = "L'utente non ha accettato il file"
  46. Command3.Caption = "Invia la richiesta"
  47.  
  48. Else
  49.  
  50. If FileOpen = False Then
  51. Open nomefile.Caption For Binary Access Write As #2
  52. FileOpen = True
  53. ElseIf FileOpen = True Then
  54. End If
  55.  
  56. Label4.Caption = "Ricezione del file in corso..."
  57. barraricezione.Max = dimensione.Caption
  58. barraricezione.Min = 0
  59. If (barraricezione.Value + 2048) < dimensione.Caption Then
  60. barraricezione.Value = barraricezione.Value + 2048
  61. ElseIf barraricezione.Value = dimensione.Caption Then
  62. barraricezione.Value = dimensione.Caption
  63. ElseIf (barraricezione.Value + 2048) > dimensione.Caption Then
  64. barraricezione.Value = dimensione.Caption
  65. End If
  66. Put 2, , temp
  67.  
  68. End If



ti sbagli l'errore sta nel client che è come se inviasse tutto in 2 secondi ma in realtà l'invio dura di piu...

Ultima modifica effettuata da acromangelo@libero.it il 20/05/2008 alle 15:02
PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 15:27
Martedì, 20/05/2008
forse evi mettere alla fine
dimensione.caption=dimensione.caption+2048

PM Quote
Avatar
acromangelo@libero.it (Normal User)
Rookie


Messaggi: 21
Iscritto: 23/03/2008

Segnala al moderatore
Postato alle 15:45
Martedì, 20/05/2008
forse non mi sono spiegato bene...
sarà meglio postare un altro codice simile ma molto piu kiaro e guardate che la barra era un esempio per farvi capire che finiva subito >.<

Quello che invia:

Codice sorgente - presumibilmente Delphi

  1. Dim chunk As Long, file as string, datafile as string
  2. file = App.Path & "\file.mp3"
  3.  
  4.  Open file For Binary Access Read As #1
  5. Winsock1.SendData "nome-file.mp3"
  6.  Sleep (100)
  7.  DoEvents
  8.  chunk = 4000
  9.  
  10.   Do While Not EOF(1)
  11.      datafile = Space$(chunk)
  12.      Get 1, , datafile
  13.      Winsock1.SendData datafile
  14.      DoEvents
  15.   Loop
  16.  
  17.   Close #1
  18.   Sleep (1000)
  19.   Winsock1.SendData "fine"



E quello che riceve:

Codice sorgente - presumibilmente VB.NET

  1. Dim data As String, nome as string
  2. Winsock1.GetData data
  3.  
  4. On Error Resume Next
  5.  
  6. If InStr(data, "dimensione") Then
  7. nome = Replace(data, "nome-", "")
  8. Open App.Path & "\" & nome For Binary Access Write As #2
  9.  
  10. ElseIf data = "fine" Then
  11. Close #2
  12.  
  13. Else
  14. Put 2, , data
  15.  
  16. End If



Commentiamo questo codice che è piu chiaro...

Ultima modifica effettuata da acromangelo@libero.it il 20/05/2008 alle 15:46
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 15:56
Martedì, 20/05/2008
Ah ... ora ho capito meglio il tuo problema ...

Non e' un problema del codice ...

E' il TCP che funziona in questo modo ...

L'invio e' bufferizzato ed asincrono e quindi il tuo processo client non puo' mai essere "sincronizzato" con il server a meno che non lo faccia tu tramite un protocollo di

invio ->
   <- conferma

PM Quote
Avatar
acromangelo@libero.it (Normal User)
Rookie


Messaggi: 21
Iscritto: 23/03/2008

Segnala al moderatore
Postato alle 16:00
Martedì, 20/05/2008
ecco proprio questo!!! sto maledettissimo buffer del cavolo!

invio conferma mmm ho provato a sfruttare la dimensione del file dicendogli di kiuderlo quando aveva raggiunto tale dimensione ma neanke cosi va visto ke sono sempre file diversi e poi fa altri casini...

in questo momento nn mi viene in mente niente...pero se si riuscisse a capire sarebbe una svolta visto ke tutte le mie applicazioni ke utilizzano tcp/ip sfruttano invio dei files >_>: chat multiutente, scambio dei files, web cam nascosta, e via dicendo...

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 16:31
Martedì, 20/05/2008
Web cam nascosta?

PM Quote
Avatar
acromangelo@libero.it (Normal User)
Rookie


Messaggi: 21
Iscritto: 23/03/2008

Segnala al moderatore
Postato alle 16:32
Martedì, 20/05/2008
nel senso che il server mi invia l'immagine della web cam in modo nascosto...per quello che dicevo web cam nascosta

comunque qualche idea?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo