Null Bytes uit string halen

Status
Niet open voor verdere reacties.

Maximvdw

Gebruiker
Lid geworden
7 feb 2009
Berichten
921
Hallo,
Ik was bezig met een telnet server te maken voor een van men programma's. Ik heb altijd wel last gehad
met null bytes aan het eind van de string. Omdat de buffer die alles ophaalt altijd groter is dan de string/bytes die worden verstuurt.
Normaal los ik dit op met een karakter aan het einde van de zin: "Hallo# " en dan substring van begin tot #
(voor duidelijheid het zijn geen Spaties, dus trim gaat niet)
Maar omdat ik nu met telnet werkt en ik geen controle heb hoe de client het verstuurt moet ik een manier vinden om de null bytes
weg te doen. In mijn debug scherm lijkt de string: "hallo" & vbCrLf & "" Dus met vbcrlf en ""
.TrimEnd(vbCrLf.ToCharArray) werkt niet.. En momenteel weet ik echt niet hoe ik het kan oplossen
Mijn string is 10000 lang hoewel enkel 'hallo' erin staat.

Weet er iemand hoe ik deze onbekende karakters kan deleten op een snelle manier die niet belastend is voor mijn server?
(dus niet elke letter scannen of het een bekend karakter is ofzo)

Gr,
Maxim
 
hoe lees je je data uit? want normaal gesproken zou een streamreader dit voor je kunnen doen. Het lijkt wel of je de ruwe data uit een socket haalt en dat probeert te behandelen.
 
Is idd zo, vb:
Dim bytesData(10024) As Byte ' De 10024 is de grote die word ontvangen. Je bericht moet hierin passen
' Indien het groter is moet je in je programma instellen dat hij meerdere pakketjes verzend

Dim networkStream As NetworkStream = Client.GetStream() ' Maak een stream tussen server/client

'Code gaat niet door totdat er IETS aankomt
networkStream.Read(bytesData, 0, CInt(Client.ReceiveBufferSize)) ' Bytesdata is de buffer waar het tijdelijk word gesaved
' de 0 is de start vanwaar je moet beginnen lezen ; en de buffersize is de lengte totwaar je moet lezen
' Het werkt dus ongeveer zoals substring
Data = System.Text.Encoding.ASCII.GetString(bytesData).TrimEnd(vbCrLf.ToCharArray) ' Vorm de bytes om naar leesbare tekst

Omdat ik geen controle heb over de verzendmethode van de client, kan ik dus geen karakters bijvoegen, of een grote van het bericht eerst verzenden.
Data is dus zo groot als de buffer (bytesData)

gr,
Maxim
 
Je kan zoiets doen:

Code:
Dim samengesteld As StringBuilder = New StringBuilder()
numberOfBytesRead = networkStream.Read(bytesData, 0, CInt(Client.ReceiveBufferSize))
samengesteld.AppendFormat("{0}", Encoding.ASCII.GetString(bytesData, 0, numberOfBytesRead))

numberOfBytesRead geeft je dus de echte hoeveelheid.
 
Hartelijk Bedankt

Hartelijk Bedankt!
Mijn probleem is nu opgelost.

M.v.g.
Maxim
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan