Avatar billede hyber Nybegynder
30. november 2008 - 13:05 Der er 7 kommentarer og
1 løsning

Sammen sætte flere strings til en. Problemer med NetworkStream

Hejsa,

Jeg har et mystisk problem. Jeg vil sammensætte flere strings til en enkelt. Normalt bruger jeg bare

str = str & str2

og det virker fint, jeg har også af og til brugt

strbuider.append(str)

uden problemer.

Mit problem er at jeg modtager et netstream som jeg gerne vil have til en lang string. Jeg bliver ved med at modtage data indtil jeg har modtaget en "CR" (ascii 13) og herefter en "LF" (ascii 10) hvorefter jeg returnere strengen. Så hvis jeg ikke modtager CR-LF i første buffer, så lytter jeg igen indtil det kommer..

her er min kode:

    Private Function SendAndGet(ByVal pstr As String) As String
        Try

            Dim netStream As NetworkStream
            Dim strBuilder As New StringBuilder("")

            netStream = mtcpClient.GetStream()

            Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(pstr & vbCrLf)
            netStream.Write(sendBytes, 0, sendBytes.Length)


            Dim bytes(mtcpClient.ReceiveBufferSize) As Byte
            Do While True

                netStream.Read(bytes, 0, CInt(mtcpClient.ReceiveBufferSize))
                Dim str As String = ""
                Dim int As Integer = 0
                While int <= bytes.Length - 1

                    If bytes(int) = 13 Then
                        If bytes(int + 1) = 10 Then
                            'MsgBox("yes we got a new line!")
                            Exit Do
                        End If
                    End If

                    int += 1
                End While

                strBuilder.Append(Encoding.ASCII.GetString(bytes))
            Loop

            Return strBuilder.ToString

        Catch ex As Exception
            RaiseEvent Log(gstrCriticalErr & ex.Message.ToString, LogLevels.Critical)
            Return ""
        End Try
    End Function


Mit problem er at jeg modager den korrekte tekst via netstream, men jeg kan ikke tilføje den til min string.

Hvis jeg modtager flere "buffers" så tilføjes kun den første, jeg har prøvet alt. Så smide den i en tmp string og kontrollere at det er det rigtige der sendes, lave str=str&str2 men det hjælper heller ikke...

Jeg fatter det ikke, er der nogen af jer eksperter der kan give mig et hint..

Mvh..

Esben
Avatar billede hyber Nybegynder
30. november 2008 - 13:08 #1
Hvis jeg telnet'er ind i programmet og sender:

t+e+s+t (4 buffers) så modtager jeg godnok de rigtige data i "bytes" variablen, men det eneste jeg får retur i stringbuider'en er "t"

--
Esben
Avatar billede arne_v Ekspert
30. november 2008 - 14:53 #2
Wrap din Stream i en StreamReader og kald ReadLine, så laver den det hele for dig !
Avatar billede hyber Nybegynder
30. november 2008 - 17:07 #3
Hej Arne,

tak for dit svar, lige et spørgsmål eller kommentar om man vil..

når jeg har modtaget mit networkstram konvertere jeg det fint nok til en streng med Encoding.ASCII.GetString(bytes) min problem er når jeg så modtager networkstream nummer 2 og "dekoder" det med Encoding.ASCII.GetString(bytes) igen, så kan jeg ikke sammen sætte mine 2 strenge til en, det er derfor jeg bruger (eller prøver) stringbuilder..

Mener du stadig at jeg kan bruge en StreamReader til at samle de 2 strenge med?

Mvh.

Esben
Avatar billede hyber Nybegynder
30. november 2008 - 17:25 #4
Ohhh, du mener hele networkstream ind i en streamreader..
Som noget i den her stil:

Dim reader As New IO.StreamReader(netStream)

smart, det skal vist lige testes lidt :-)

--
Esben
Avatar billede arne_v Ekspert
30. november 2008 - 17:26 #5
Ja.

Fordi så sørger StreamReader for at læse indtil CR LF.
Avatar billede arne_v Ekspert
30. november 2008 - 17:26 #6
Og ReadLine returnerer en hel linie.
Avatar billede hyber Nybegynder
30. november 2008 - 18:40 #7
det er fantastisk, det virker... takker..

smid et svar og du skal få points..

--
Esben
Avatar billede arne_v Ekspert
30. november 2008 - 19:06 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester