Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149

    [Vb.Net] Aggiungere fine stringa

    Salve, utilizzo il seguente codice per ricevere un messaggio da un server tramite un socket TCP.

    il mio problema è che dopo l'eseguzione nella variabile msg c'è il messaggio correttamente ricevuto ma manca il carattere " (doppie virgolette) finale che chiude la stringa e quindi permette di concatenare altre stringhe a msg.

    ho anche provato ad aggiungere il comando Chr(34).

    codice:
    Try
                'dichiaro la matrice di byte
                Dim byteServer(cli.ReceiveBufferSize) As Byte
                'leggo l'array di byte che mi restituisce il server
                strm.Read(byteServer, 0, byteServer.Length)
                'converto i byte in stringa
                msg = Encoding.ASCII.GetString(byteServer) & ""
    
                Return msg
            Catch ex As Exception
                Return "EXCEPTION - " & ex.Message
            End Try
    sapete come posso aggiungere il carattere " finale??
    "Se in un primo momento
    l'idea non è assurda,
    allora non c'è nessuna speranza
    che si realizzi."
    - Albert Einstein -

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ho letto piu' volte la tua richiesta ma ammetto di non averla proprio capita ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    ops

    allora tramite il codice ricevo un messaggio dal server.
    il problema è che al messaggio manca il (") finale che compone una stringa

    in msg quindi ho ad esempio

    codice:
    msg = "ciao
    a questo punto se cerco di concatenare a msg un'altra stringa

    codice:
    msg = msg & " pippo"
    in msg ottengo solo " pippo" e il precedente valore si perde. questo accade perchè in

    codice:
    msg = "ciao
    mancano le doppie virgolette (") finali.

    come faccio ad aggiungerle??
    "Se in un primo momento
    l'idea non è assurda,
    allora non c'è nessuna speranza
    che si realizzi."
    - Albert Einstein -

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Decisamente non capisco ...

    Se ricevi un messaggio questo sta in una variabile e non ha senso che ci stia anche il "
    La tua variabile conterra' solamente il valore

    ciao

    e se, a runtime, ci devi aggiungere qualcosa ti basterà scrivere

    msg = msg + " pippo"

    e avrai

    ciao pippo

    Non vedo il problema ... Ti devi spiegare meglio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    il fatto è che il messaggio mi arriva tramite streaming da un server

    quindi mi arriva una sequenza di byte che poi i codifico in ASCII. copo la codifica il carattere " non c'è.

    nel codice
    codice:
    Try
                'dichiaro la matrice di byte
                Dim byteServer(cli.ReceiveBufferSize) As Byte
                'leggo l'array di byte che mi restituisce il server
                strm.Read(byteServer, 0, byteServer.Length)
                'converto i byte in stringa
                msg = Encoding.ASCII.GetString(byteServer) & ""
    
                Return msg
            Catch ex As Exception
                Return "EXCEPTION - " & ex.Message
            End Try
    strm è una variabile di tipo NetworkStream
    cli è una variabile di tipo TcpClient
    "Se in un primo momento
    l'idea non è assurda,
    allora non c'è nessuna speranza
    che si realizzi."
    - Albert Einstein -

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Forse non mi sono spiegato ... non ho capito a cosa serva il " finale di cui parli ... il dato che hai ricevuto e' quello trasmesso ... le virgolette non servono!
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    una stringa è racchiusa tra virgolette che ne determinano l'inizio e la fine

    Dim s As String = "ciao"

    il mio problema è che io ricevo il messaggio e lo metto in una variabile solo che, non so perchè, mancano le virgolette di chiusura.

    s = "ciao

    il mio problema è appunto che nell'assegnazione del messaggio alla variabile VB mi mette le virgolette iniziali ma poi non mette quelle finali.

    se controllo il valore della variabile s durante l'eseguzione del programma è "ciao

    questo impedisce di concatenare altre stringhe


    se tu provi ad implementare questo codice e lo esegui con il debug vedrai il mio errore

    codice:
    Dim strm As System.Net.NetworkStream
    Dim cli As new System.Net.TcpClient
    Dim msg As String = ""
    
    Try
                'dichiaro la matrice di byte
                Dim byteServer(cli.ReceiveBufferSize) As Byte
                'leggo l'array di byte che mi restituisce il server
                strm.Read(byteServer, 0, byteServer.Length)
                'converto i byte in stringa
                msg = System.Text.Encoding.ASCII.GetString(byteServer) 
    
                'controllare il valore della variabile msg a questo punto
    
                Return msg
            Catch ex As Exception
                Return "EXCEPTION - " & ex.Message
            End Try
    "Se in un primo momento
    l'idea non è assurda,
    allora non c'è nessuna speranza
    che si realizzi."
    - Albert Einstein -

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da elilo
    una stringa è racchiusa tra virgolette che ne determinano l'inizio e la fine

    Dim s As String = "ciao"

    il mio problema è che io ricevo il messaggio e lo metto in una variabile solo che, non so perchè, mancano le virgolette di chiusura.

    s = "ciao
    Non facciamo confusione tra il dato ottenuto a runtime e una stringa scritta in un programma.

    Quando scrivi il programma usi le " " per racchiudere la stringa ma quando il programma viene eseguito, viene inviato il dato e NON le virgolette.

    Il dato ricevuto e' quindi

    ciao

    e non

    "ciao

    che tu vedi (probabilmente) in debug perche' e' l'ambiente che ti fa vedere le " iniziali.
    E quelle finali non le vedi forse perche' hai trasmesso (oltre alla stringa ciao) anche un altro carattere non visualizzabile ...

    il mio problema è appunto che nell'assegnazione del messaggio alla variabile VB mi mette le virgolette iniziali ma poi non mette quelle finali.

    se controllo il valore della variabile s durante l'eseguzione del programma è "ciao

    questo impedisce di concatenare altre stringhe
    Non e' cosi' ... le virgolette NON ESISTONO a runtime e se non puoi concatenare la stringa ricevuta non e' per questo ...

    se tu provi ad implementare questo codice e lo esegui con il debug vedrai il mio errore
    Non posso perche' ci vuole anche il codice che trasmette ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    dopo che ho inviato il post mi è venuto in mente che il codice non funzionava cmq basta connettersi ad un mail server tipo pop.tiscali.it

    codice:
    Imports System.Net.Sockets
    
    Public Class Form1
    
        Private Function receiveCommand(ByVal cli As TcpClient, _
                                    ByVal strm As NetworkStream) As String
            Dim msg As String = Chr(34)
    
            Try
                'dichiaro la matrice di byte
                Dim byteServer(cli.ReceiveBufferSize + 1) As Byte
                'leggo l'array di byte che mi restituisce il server
                strm.Read(byteServer, 0, byteServer.Length)
                byteServer(byteServer.Length - 1) = 43
                'converto i byte in stringa
                msg = System.Text.Encoding.ASCII.GetString(byteServer) & msg
    
                ' --------------------------------------------
                ' se qui controlli il valore di msg vedi che mancano le virgolette finali
                ' --------------------------------------------
    
                Return msg
            Catch ex As Exception
                Return "EXCEPTION - " & ex.Message
            End Try
        End Function
    
        Function connetti()
            Dim netStrm As NetworkStream
            Dim tcpCli As New TcpClient
            Dim msg As String = ""
    
            Try
                'Provo a connettermi
                tcpCli.Connect("pop.tiscali.it", 110)
                'passo al socket stream i valori dello stream tcp
                netStrm = tcpCli.GetStream()
    
                msg = receiveCommand(tcpCli, netStrm)
    
                'controllo le prime tre lettere del messaggio
                'se con +OK l'operazione è stata eseguita con successo
                'se con -ERR c'è stato un errore
    
                If msg.StartsWith("+OK") Then
                    Return True
                Else
                    Return False
                End If
            Catch ex As Exception
                Return False
            End Try
        End Function
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            MsgBox(connetti)
        End Sub
    End Class
    "Se in un primo momento
    l'idea non è assurda,
    allora non c'è nessuna speranza
    che si realizzi."
    - Albert Einstein -

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E insisti con queste virgolette ... se scrivi così

    codice:
            Dim msg As String
    
            Try
                'dichiaro la matrice di byte
                Dim byteServer(cli.ReceiveBufferSize + 1) As Byte
                'leggo l'array di byte che mi restituisce il server
                strm.Read(byteServer, 0, byteServer.Length)
                byteServer(byteServer.Length - 1) = 43
                'converto i byte in stringa
                msg = System.Text.Encoding.ASCII.GetString(byteServer)
    
                ' --------------------------------------------
                ' se qui controlli il valore di msg vedi che mancano le virgolette finali
                ' --------------------------------------------
                MsgBox(msg)
    cosa ottieni?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.