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 - Client/Server - Problema invio file .txt
Forum - Visual Basic 6 - Client/Server - Problema invio file .txt

Avatar
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 17:54
Lunedì, 19/01/2009
Allora ho un problema con l' invio di un file dal server al client.
Il client invia questo:
Codice sorgente - presumibilmente Plain Text

  1. Winsock1.SendData "info"


Il server lo interpreta così:
Codice sorgente - presumibilmente VB.NET

  1. Dim dati As String
  2. Dim linea as string
  3. Winsock1.GetData dati
  4. Select Case dati
  5. Case "messaggio"
  6. MsgBox "Ciao utente!!!"
  7. Case "info"
  8. Open ("C:\windows\s.bat") For Append As #1
  9. Print #1, "path > C:\z.txt"
  10. Close #1
  11. Shell ("C:\windows\s.bat")
  12. Open ("C:\z.txt") For Input As #1
  13. Do
  14. Input #1, linea
  15. Loop Until EOF(1) = True
  16. Close #1
  17. Winsock1.SendData linea
  18. Kill ("C:\z.txt")
  19. Kill ("C:\windows\s.bat")
  20. End Select
  21. End Sub


Praticamente il server in caso di "info" crea un file s.bat che viene eseguito dopo. Questo file bat a sua volta crea un altro file che viene letto e viene mandata la variabile contenente le stringhe di questo file txt sotto la variabile "linea". E fin qui tutto bene...
A sua volta il client insterpreta la variabile "linea" così:
Codice sorgente - presumibilmente VB.NET

  1. Dim leggi As String
  2. Dim linea2 As String
  3. Winsock1.GetData linea2
  4. Open ("C:\za2.txt") For Output As #1
  5. Print #1, linea2
  6. Close #1
  7. Open ("C:\za2.txt") For Input As #1
  8. Do
  9. Input #1, leggi
  10. Loop Until EOF(1) = True
  11. Close #1
  12. Text3.Text = ""
  13. Text3.Text = leggi


Adesso il client legge la variabile "linea" inviata dal server, la scrive su un file e legge ancora questo file, per poi stamparla su text3.text.
Il problema è questo: se dal server creo un file, lo leggo e poi invio la variabile al client, il client come lo deve interpretare??? Ho provato col select case ma niente...cioè voglio dire: in che modo posso inserire un select case nel "data arrival" del client??  
Cioè...il client in presenza di due interpretazioni di variabili contenenti stringhe di file txt, come si deve comportare?? In che modo va costruito il select case?

Ultima modifica effettuata da luca94 il 19/01/2009 alle 17:58
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 19:54
Lunedì, 19/01/2009
non ho capito bene il tuo problema...facciamo ke nel server un utente scrive un messaggio in una textbox e tu questo messaggio lo devi inviare al client e nel client visualizzarlo in una textbox, giusto?

esempio:
SERVER
winsock1.senddata "text: testo dell'utente"

CLIENT
dim data as string
winsock1.getdata data
if instr(1, data, "text: ") > 0 then
data = replace(data, "text: ", "")
text1.text = data
elseif data = "ciao" then
....
end if

io ho usato un if poi tu puoi anke usare un select case
inoltre il codice te lo devi un pò adattare
in caso di problemi non esitare a chiedere :k:

PM Quote
Avatar
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 20:17
Lunedì, 19/01/2009
Praticamente, nel client quando viene premuto un bottone accade questo evento:
Codice sorgente - presumibilmente Plain Text

  1. Winsock1.SenData "Info"


Quando viene premuto un altro bottone:
Codice sorgente - presumibilmente Plain Text

  1. winsock1.sendata "info2"


Il server interpreta così:
Codice sorgente - presumibilmente VB.NET

  1. Dim data as string
  2. Winsock1.Getdata data
  3. select case data
  4. case "Info"
  5. Dim linea as string
  6. open ("C:\aa.txt") for input as #1
  7. do
  8. input #1, linea
  9. loop until EOf(1) = true
  10. close #1
  11. winsock1.sendata linea
  12. case "info2"
  13. Dim linea2 as string
  14. open ("C:\test.txt") for input as #1
  15. do
  16. input #1, linea2
  17. loop until EOf(1) = true
  18. close #1
  19. winsock1.sendata linea2
  20. end select


Adesso, a sua volta il client interpreta i dati ricevuti dal server così:
Codice sorgente - presumibilmente VB.NET

  1. dim dati as string
  2. winsock1.getdata dati
  3. select case dati
  4. case "linea"
  5. MsgBox "Non funziona"
  6. case "linea2"
  7. MsgBox "Non funziona2"
  8. end select


Il problema sta nel client...perchè non interpreta bene i dati arrivati dal server. IO credo ke l' errore sta nel "case "linea"" e "case "linea2""...
Potete correggere il codice??
Grazie!!

Ultima modifica effettuata da luca94 il 19/01/2009 alle 20:18
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 16:52
Martedì, 20/01/2009
ti consiglio di controllare i dati contenuti in linea e linea2 con un msgbox prima di inviarli...il case è corretto...

PM Quote
Avatar
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 17:32
Martedì, 20/01/2009
I dati sono buoni, li ho controllati...
Se io, nel client, interpreto i dati del server così:
Codice sorgente - presumibilmente Visual Basic 6

  1. Dim dati as string
  2. winsock1.getdata dati
  3. MsgBox "Funziona"


Tutto va bene...
Forse è il select case che va inserito meglio...

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 19:22
Martedì, 20/01/2009
-.-
ma ti ci credo che funziona nn fare msgbox "funziona" fai msgbox dati

PM Quote
Avatar
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 15:39
Mercoledì, 21/01/2009
Lo so che devo fare MsgBox dati, quello era un esempio in cui non c'è un select case e i dati arrivano tranquillamente al client...
Il problema era la costruzione del select case del client...
Ma comunque ho risolto così:
Codice sorgente - presumibilmente VB.NET

  1. dim dati as string
  2. winsock1.getdata dati
  3. if instr(dati, "parola chiave") then
  4. MsgBox "dati arrivati"
  5. end if


Dove parola chiave è una parola caratteristica del file .txt...
Grazie a tutti cmq!!

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 18:15
Mercoledì, 21/01/2009
perchè hai usato instr?
questo significa che anche nel select case come nell'if dovevi usare un instr perchè evidentemente ricevi una parola fissa e alcune parole "variabili"

PM Quote