Newsgroup: it.comp.lang.visual-basic
Titolo: Winsock con VB 6.0 Sp5: problemi con il Client

Brevemente: vorrei che l'applicazione Client invii ad un Sever un certo
numero di stringhe in successione.
Nessun problema per l'invio al Server di una sola stringa:
Private Sub cmdInvia_Click()
    Dim Stringa As String
    ' Verifico che la connessione sia attiva:
    If Winsock1(1).State = sckConnected Then
        ' Invio il messaggio:
        Winsock1(1).SendData txtMessaggio
    Else
        ' Avverto l'utente:
        MsgBox Title:="E' necessario creare una connessione !",
Buttons:=vbExclamation + vbOKOnly + vbSystemModal
    End If
End Sub
Il problema nasce quando intendo inviare una serie di stringhe in
succssione:
Private Sub cmdInvia_Click()
    Dim i as Integer
    Dim Stringa As String
    ' Verifico che la connessione sia attiva:
    If Winsock1(1).State = sckConnected Then
        ' Invio il messaggio:
        For i = 1 to 15
            DoEvents
            Winsock1(1).SendData txtMessaggio & "," & i
        Next i
    Else
        ' Avverto l'utente:
        MsgBox Title:="E' necessario creare una connessione !",
Buttons:=vbExclamation + vbOKOnly + vbSystemModal
    End If
End Sub
In sostanza l'invio della stringa (evento Winsock1_SendComplete(Index As
Integer)) non avviene ad ogni ciclo del ciclo For (istruzione
Winsock1(1).SendData txtMessaggio & "," & i) ma avviene quando ha termine
l'evento cmdInvia_Click().
Lo starno è che in questo caso al Server viene inviata un sola stringa che
risulta una concatenazione delle singole stringhe.
Qualcuno sa aiutarmi?
PS. Sono nuovo all'utilizzo di WinSock e vi sarei grato se mi indicaste un
tutoring  su come utilizzare al meglio e correttamente un WinSock in
un'applicazione Client/Server.
Ho scaricato alcuni esempi dal sito comune e mi sembra che WinSock abbia un
po di bugs almeno la versione (Control ActiveX Microsoft Winsock ver.
6.00.8988) di cui dispone il mio ambiente di sviluppo (VB 6.0 (Sp5) Pro )
Grazie 1000
Mosca

 Qualcuno sa aiutarmi?
normale , il wsk funziona cosi : lui invia quando glielo dici tu ...
l'arrivo sei tu che lo devi gestire
es:
...
Wsk1.SendData  "C"
Wsk1.SendData  "i"
Wsk1.SendData  "a"
Wsk1.SendData  "o"
...
molto spesso e' simile a
Wsk1.SendData  "Ciao"
infatti tu controlli l'invio, ma la ricezione e' bufferizzata quindi sei tu
che nel data_arrival devi mettere il codice per ricostruire o splittare le
stringhe !


Ummm,
e se io volessi inviare singolarmente "c", "i", "a", "o" come potrei fare,
tento conto che il mio Server (non è un PC) è in grado di ricevere stringhe
di lunghezza pari a 1 carattere (è un esempio naturalmente)?
Grazie 1000
Mosca


Ammesso che funzioni potresti provare con un DoEvents.
Comunque come dice Giogio2k non è chi manda a dover farsi i problemi ma
bensi chi riceve che deve gestirsi i dati.
potresti mettere un carattere ( o  meglio una serie di caratteri che prevedi
non saranno usati o comunque non in quella sequenza) di fine comando.
E nel client bufferizzare (magari con un timeout) finchè non ricevi quel
particolare carattere.
Ciao :)

 stringhe di lunghezza pari a 1 carattere (è un esempio naturalmente)?
Potresti scrivere
**********************************************
Dim Inviato as boolean
Dim Messaggio as string 
Private Sub Form_Load
        Inviato=true
        messaggio="ciao"
        call invia_dati
end sub
Private Sub Invia_Dati
        Dim Cont as integer
        cont=1
        do while cont<len(messaggio)
                doevents
                if inviato then 
                        cont=cont+1
                        inviato=false
                        call winsock1.send(mid(messaggio,cont,1))
                end if
        loop
end sub
'/// Ogni volta che l'invio è completato, cambia stato alla variabile 
'/// booleana
Private Sub Winsock_SendComplete
        inviato=true
End sub
**********************************************
Ciao,
        Fabrizio