Re: How is this conditional able to execute?
- From: "Brett" <no@xxxxxxxx>
- Date: Mon, 18 Apr 2005 13:32:46 -0400
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.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
.
- References:
- How is this conditional able to execute?
- From: Brett
- Re: How is this conditional able to execute?
- From: Stephany Young
- Re: How is this conditional able to execute?
- From: Brett
- Re: How is this conditional able to execute?
- From: Stephany Young
- Re: How is this conditional able to execute?
- From: Brett
- Re: How is this conditional able to execute?
- From: Stephany Young
- Re: How is this conditional able to execute?
- From: Brett
- Re: How is this conditional able to execute?
- From: Stephany Young
- Re: How is this conditional able to execute?
- From: Brett
- Re: How is this conditional able to execute?
- From: Stephany Young
- Re: How is this conditional able to execute?
- From: Brett
- Re: How is this conditional able to execute?
- From: Stephany Young
- How is this conditional able to execute?
- Prev by Date: Re: Checking that a Windows Service is running and restarting if stopped
- Next by Date: Re: record locking with DBF (visual basic) table in ADO OLEDB in VB.NET
- Previous by thread: Re: How is this conditional able to execute?
- Next by thread: Re: How is this conditional able to execute?
- Index(es):
Relevant Pages
|
Loading