Re: How is this conditional able to execute?



I'll have to test this later. Now the server keeps sending back an array
with some non zero entries.

Thanks,
Brett
"Stephany Young" <noone@localhost> wrote in message
news:eID0C6BRFHA.3716@xxxxxxxxxxxxxxxxxxxxxxx
> OK. So far so good
>
> Using the following:
>
> Dim _b() As Byte = New Byte(49) {0, 78, 111, 116, 104, 105, 110, 103,
> 32, 116, 111, 32, 87, 114, 105, 116, 101, 32, 102, 114, 111, 109, 58, 32,
> 68, 101, 118, 101, 108, 111, 112, 109, 101, 110, 116, 51, 0, 0, 0, 0, 0,
> 0, 0, 0, 0, 0, 0, 0, 0, 0}
>
> Console.WriteLine("_b.Length = {0}", _b.Length)
>
> Dim _s As String = System.Text.Encoding.UTF8.GetString(_b)
>
> Console.WriteLine("_s.Length = {0}", _s.Length)
>
> _s = _s.Trim(Char.MinValue)
>
> Console.WriteLine("_s.Length (after trim) = {0}", _s.Length)
>
> Console.WriteLine("_s = *{0}*", _s)
>
> I get the following results:
>
> _b.Length = 50
> _s.Length = 50
> _s.Length (after trim) = 35
> _s = *Nothing to Write from: Development3*
>
> Which is exactly what I would expect to get from the byte values you
> supplied.
>
> Note that the _s.Trim(Char.MinValue) has stripped the Null character from
> the beginning and the 14 Null characters from the end which leaves 35
> 'good' characters (see above).
>
> It is the Null character at the beginning that is causing your string to
> be interpreted as an empty string because the Null character is treated as
> an 'end of string' marker. Any leading Null characters must be 'trimmed'
> off and it is recommended that you 'trim' any trailing Null characters as
> well.
>
>
>
> "Brett" <no@xxxxxxxx> wrote in message
> news:%2326T0lBRFHA.164@xxxxxxxxxxxxxxxxxxxxxxx
>>
>> "Stephany Young" <noone@localhost> wrote in message
>> news:uYXW0%23ARFHA.3364@xxxxxxxxxxxxxxxxxxxxxxx
>>> This is getting scary :)
>>>
>>> Lets take this one step at a time.
>>>
>>> I'm a bit perplexed as to why a recieve buffer would be such a strange
>>> size. Could it be that the value of tcpClient.ReceiveBufferSize is
>>> actually 8192 (8KB)? If so, then the array declaration should be:
>>>
>>> Dim bytes(tcpClient.ReceiveBufferSize - 1) As Byte
>>
>> Yes - it is 8192 after putting in the above code.
>>
>>>
>>> In VB.NET, arrays are 0 based and the value specified is the upper bound
>>> of the array as opposed to the number of elements (as in C#.NET).
>>>
>>> Can you dump the first 50 bytes of the array on the first call. Directly
>>> after the line:
>>>
>>> networkStream.Read(bytes, 0, tcpClient.ReceiveBufferSize)
>>>
>>> insert:
>>>
>>> For _i As Integer = 0 to 48
>>> Console.Write("{0},", bytes(_i).ToString())
>>> Next
>>> Console.WriteLine("{0}", bytes(_i).ToString())
>>>
>>> Add another line:
>>>
>>> Console.WriteLine()
>>>
>>> and place a breakpoint on this line.
>>>
>>> Run the code then copy and paste the result into a post to this thread.
>>
>> When returndata is "", the above code gives this:
>>
>> 0,78,111,116,104,105,110,103,32,116,111,32,87,114,105,116,101,32,102,114,111,109,58,32,68,101,118,101,108,111,112,109,101,110,116,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0
>>
>>>
>>> It will be interesting to see just what characters are arriving.
>>>
>>> A new byte array is created each time the networkStream object is read
>>> so there is nothing from the previous red remaining. Therefore the
>>> comment about the 'values shifting' is a red herring. What you are
>>> getting is actually what is coming from the networkStream object.
>>>
>>> Also, is there any particular reason why you are using UTF8 encoding to
>>> interpret the data? Is it specified somewhere that the data arriving in
>>> the networkStream object is actually UTF8 or is just a stab in the dark?
>>
>> Yes - I read on experts-exchange.com that this would work with Trim but
>> it didn't. I never removed it because it didn't seem to make a
>> difference.
>>
>> On the listener, I haven't declared a size that should be 8KB. I do
>> this:
>>
>> Dim networkStream As NetworkStream =
>> tcpClientObj.GetStream()
>> ' Read the stream into a byte array
>> Dim bytes(tcpClientObj.ReceiveBufferSize) As Byte
>>
>> If networkStream.DataAvailable() Then
>> networkStream.Read(bytes, 0,
>> CInt(tcpClientObj.ReceiveBufferSize))
>>
>> Dim mystring As String =
>> Encoding.UTF8.GetString(bytes)
>>
>> Dim sendBytes_ As [Byte]() =
>> Encoding.ASCII.GetBytes(mystring)
>>
>> networkStream.Write(sendBytes_, 0, sendBytes_.Length)
>> sendBytes_.Clear(sendBytes_, 0, sendBytes_.GetLength(0))
>>
>>>
>>>
>>> "Brett" <no@xxxxxxxx> wrote in message
>>> news:%23aS0EDARFHA.2744@xxxxxxxxxxxxxxxxxxxxxxx
>>>>I tried this but it isn't working either. At one point, the bytes array
>>>>has non zero elements up to element 35. returndata has the value of ""
>>>>(or so it seems) and length of 8193, same as the bytes array. Through
>>>>each pass of the loop, the non zero elements increase in the bytes
>>>>array. So it goes from element 35 to 36, 37 and so on. The values are
>>>>shifting so that the first 10 are now zero. Then the first 11, 12, 13
>>>>and so on.
>>>>
>>>> Any other suggestions?
>>>>
>>>> Thanks,
>>>> Brett
>>>>
>>>> "Stephany Young" <noone@localhost> wrote in message
>>>> news:u1TlDb9QFHA.2680@xxxxxxxxxxxxxxxxxxxxxxx
>>>>> Sorry, my mistake. Null (Chr(0)) is not treated as whitespace by the
>>>>> String.Trim Method.
>>>>>
>>>>> Instead, you can can use one of the overloaded String.Trim methods.
>>>>>
>>>>> Dim returndata As String =
>>>>> Encoding.UTF8.GetString(bytes).Trim(Char.MinValue)
>>>>>
>>>>> Char.MinValue is a constant for 0x00 which equates to Null or Chr(0).
>>>>>
>>>>> This overload removes all occurrences of a set of characters specified
>>>>> in an array from the beginning and end of the string instance.
>>>>>
>>>>>
>>>>> "Brett" <no@xxxxxxxx> wrote in message
>>>>> news:uPLcAZ6QFHA.3988@xxxxxxxxxxxxxxxxxxxxxxx
>>>>>>
>>>>>> "Stephany Young" <noone@localhost> wrote in message
>>>>>> news:%23hNf834QFHA.3988@xxxxxxxxxxxxxxxxxxxxxxx
>>>>>>> What test are you using to determine that returndata.ToString = ""?
>>>>>>>
>>>>>>> Are you , for example, executing a:
>>>>>>>
>>>>>>> Console.Writeline("returndata.ToString = " & returndata.ToString)
>>>>>>>
>>>>>>> and getting the result:
>>>>>>>
>>>>>>> returndata.ToString =
>>>>>>>
>>>>>>> Your comment about returndata 'always' being 8193 bytes gives us the
>>>>>>> clue as what is happening.
>>>>>>>
>>>>>>> I suspect that returndata is padded with null characters (chr(0)).
>>>>>>>
>>>>>>> The Trim function (aka Microsoft.VisualBasic.Trim) only 'trims'
>>>>>>> leading and trailing Space characters.
>>>>>>>
>>>>>>> The String.Trim Method 'trims' leading and trailing whitespace
>>>>>>> characters. 'whitespace' comprises a number of characters including
>>>>>>> the null character (chr(0)).
>>>>>>>
>>>>>>> I think that if you change the line:
>>>>>>>
>>>>>>> Dim returndata As String = Trim(Encoding.UTF8.GetString(bytes))
>>>>>>>
>>>>>>> to
>>>>>>>
>>>>>>> Dim returndata As String = Encoding.UTF8.GetString(bytes).Trim()
>>>>>>>
>>>>>>> then the test will work correctly.
>>>>>>
>>>>>> That doesn't work either. In some cases, bytes will come in as a
>>>>>> zero byte array with length 8193. Every element in that array will
>>>>>> be zero. returndata is assigned and its length becomes 8193 as well.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>


.



Relevant Pages

  • Re: Help a beginner - simple lowercase to uppercase and so on function
    ... And then one to loop across the string calling that function ... copying at to a new array. ... are any characters other than lowercase letters */ ...
    (comp.lang.c)
  • Re: fgets question
    ... documentation didn't say if fgets put \0 after a string literal. ... fgets() has nothing at all to do with string literals. ... within the bounds of the array, then it is not a string. ... strlenon an array of characters that is not a string, ...
    (comp.lang.c)
  • Re: Help creating a random string in Perl
    ... can pick one of the 7 characters in my source string) by using "print ... third and fourth characters to and check that the random number hasn't ... shuffling the array ... The idea here is to swap the current cell with some cell ...
    (perl.beginners)
  • Re: newbie: mapping CHARACTER*2 to INTEGER*2
    ... that destroys the Chinese characters in my input. ... effect the conversion required. ... If MOLD is an array and SIZE is omitted, ... represent the values 4.0 and 1082130432 as the string of binary digits ...
    (comp.lang.fortran)
  • Re: Parsing binary values in the registry
    ... how to take a string variable that could concievably be up to 300 ... and split that into either an array or multiple variables for ... every 32 characters within the original varable. ... I am trying to build a file path from a binary value in the ...
    (microsoft.public.scripting.vbscript)

Loading