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

    [VB6] Socket che non va....

    Ciao a tutti, ho questo problema:
    il mio pda, trasmette via socket al server una stringa formata in questo modo: username|password

    Ovviamente username e password sono due campi di testo sul programma del mio palmare.

    Il risultato è che ottengo solo la prima lettera di username:

    posto il codice del cleint x SendData
    codice:
    Private Sub Command1_Click()
    If Len(txtuser) > 0 And Len(txtpswd) > 0 Then
            'MsgBox (txtuser)
            'WinSock1.SendData ("@")
            WinSock1.SendData txtuser.Text & "|" & txtpswd.Text
    Else
        MsgBox ("Controlla tutti i campi da inviare")
    End If
    End Sub
    e questo il code del server
    codice:
    Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    'MsgBox ("sono nella parte decisiva")
        
       sckServer(intMax).GetData user_pda, vbString       ' Copia i dati del Buffer in entrata nella variabile Data e svuota il Buffer
        'sckServer(intMax).PeekData user_pda, vbString
        If Not Trim(user_pda) = "@" Then
            user_rem = user_rem & user_pda
            'FormTest.Show
        End If
        'FormTest.Textuser.Text = FormTest.Textuser.Text & user_rem
        'MsgBox (user_rem)
        FormTest.Show
    End Sub
    ecco dove da il problema:
    codice:
    Private Sub Form_Load()
    Textuser.Text = user_pda
    spl = Split(Textuser.Text, "|")
    user = spl(0)
    pswd = spl(1)
    Set conn = DataEnvironment1.Connection1
    conn.Open
    ...
    su pswd = spl(1) da errore perchè come dicevo prima non passa tutta la stringa ma solo la prima lettera dell'username.

    dove sbaglio ?

    grazie 1000
    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

  2. #2
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Probabilmente non aspetti abbastanza durante l'arrivo dei dati.

    Prova ad inserire un ciclo di ritardo nell'evento data_arrival oppure controlla che il parametro bytesTotal corrisponda al numero di caratteri che dovrebbero arrivare.

    e cmq mi pare che quell'evento venga generato solo all'arrivo del primo carattere (non e' come nelle comunicazioni seriali via COM)
    ...and I miss you...like the deserts miss the rain...

  3. #3
    non ho ben capito... cosa devo controllare ?

    cioè come faccio a controllare cosa ?
    scusa eh ma sono all'inizi con questa roba....

    grazie
    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

  4. #4
    Intende dire che l'evento DataArrival si verifica quando il client invia un pacchetto di dati, non quando finisce di inviare tutti i dati. Per esempio, se invio la stringa "Ciao Pippo" il server potrebbe riceve la stringa divisa in: "Cia" - "o P" - "ipp" - "o", quindi l'evento data arrival si verificherebbe 4 volte. Occorre quindi attendere la fine della trasmissione, ovvero l'ultimo pacchetto. Il problema è: come fai a sapere che è finita la trasmissione? Bisogna inserire un byte o una sequenza di byte alla fine della stringa che il programma server riesce a riconoscere, nel tuo caso è comodo il Crlf (0D0A). Quindi modifica l'invio dei dati in
    codice:
    WinSock1.SendData txtuser.Text & "|" & txtpswd.Text & chr(13) & chr(10)
    e il server in
    codice:
    Dim AttesaDati As Boolean = True
    Dim StringaDaRicevere As String
    Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
      Dim StringaAppoggio As String
      If AttesaDati = True Then 'se è una nuova trasmissione
        AttesaDati = False
        StringaDaRicevere = ""
      End If
      sckServer(intMax).GetData StringaAppoggio, vbString
      StringaDaRicevere = StringaDaRicevere & StringaAppoggio
      If Len(StringaDaRicevere) > 1 Then
        If Rigth(StringaDaRicevere, 2) = chr(13) & chr(10) Then
          MsgBox "TrasmissioneFinita!"
          'Copia subito la stringa ricevuta in una nuova variabile, altrimenti rischia di essere sovrascritta da altri dati.
          'Qualsiasi altra operazione falla al di fuori di questa Sub.
          AttesaDati = True
        End If
      End If
    End Sub

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.