Re: How is this conditional able to execute?




"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: How is this conditional able to execute?
    ... It is the Null character at the beginning that is causing your string to be ... Any leading Null characters must be 'trimmed' off ... then the array declaration should be: ... >> actually what is coming from the networkStream object. ...
    (microsoft.public.dotnet.languages.vb)
  • Re: How is this conditional able to execute?
    ... Now the server keeps sending back an array ... > 'good' characters. ... > be interpreted as an empty string because the Null character is treated as ... >>> getting is actually what is coming from the networkStream object. ...
    (microsoft.public.dotnet.languages.vb)
  • Re: How is this conditional able to execute?
    ... then the array declaration should be: ... A new byte array is created each time the networkStream object is read so ... the non zero elements increase in the bytes array. ... >> an array from the beginning and end of the string instance. ...
    (microsoft.public.dotnet.languages.vb)
  • Re: A good data structure to store INI files.
    ... },{#Second Ship ... But I would need overload for that, and I could save it into an array for the order and a hash for quick lookup. ...
    (comp.lang.perl.misc)
  • Could use some help...:)
    ... I need to overload the ... intended to contain a 2d array. ... keyboard in the constructor ... ---as a member of class A? ...
    (comp.lang.cpp)