[Mono-devel-list] NetworkStream
Arnhoffer Károly
karnhoffer at ecron.hu
Wed Jul 20 09:54:28 EDT 2005
Hi,
If I do not do the "While Not llogReadEverything" loop, it reads the data.
Private Function ReadData(ByRef tobjNetStream As NetworkStream, ByRef tbytBuffer As Byte(), ByVal tintFullSize As Integer) As Boolean
Dim lintSize As Integer = 0
Dim llogReadEverything As Boolean
Dim lintCounter As Integer
ReDim tbytBuffer(tintFullSize - 1)
While Not tobjNetStream.DataAvailable
Thread.CurrentThread.Sleep(50)
End While
lintSize += tobjNetStream.Read(tbytBuffer, 0, tintFullSize)
Return True
End Function
Do not understand the reason why. :)
Arnhoffer Károly
----------------------------------------
eCron Informatika Kft.
1119 Budapest, Hadak útja 9.
tel./fax: +36 (1) 203-1535
mobil: +36 (30) 472-8855
e-mail: karnhoffer at ecron.hu
-----Original Message-----
From: Martin Hinks [mailto:mhinks at gmail.com]
Sent: Wednesday, July 20, 2005 10:59 AM
To: Arnhoffer Károly
Cc: mono-devel-list at lists.ximian.com
Subject: Re: [Mono-devel-list] NetworkStream
Hi Arnhoffer,
There are various things to try:
1.) Check that tIntFullSize is not 0 when the .Read line is called.
2.) Try this with a plain networkstream derived from a socket rather than from a TcpClient
3.) If you are trying to read the entire buffer of length tintFullSize, is it not possible that the server has not sent all the data when the read is performed? ie. Just because DataAvailable is true does NOT mean that you may be able to read ALL the data you are expecting from the stream, it might not have arrived yet, and as you are expecting to be able to read it all it might return 0 (I think it should block though, which is why it must work on .NET)
4.) After some of the diagnoses above, file a bugzilla report.
Martin
On 7/20/05, Arnhoffer Károly <karnhoffer at ecron.hu> wrote:
> Hi,
>
> I have a server service created by Visual Studio .Net. It is using
> System.Net.Sockets.TcpClient.GetStream to get a stream to communicate
> on the network. When I run this service on a Windows machine (MS .NET
> framework) everything is fine, but when running on a Linux machine
> (SuSE 9.2, Mono 1.1.8 (from RPMs)) the service reads allways zeroes
> from the stream.
>
> Example:
>
> Private Function ReadData(ByRef tobjNetStream As
> NetworkStream, ByRef tbytBuffer As Byte(), ByVal tintFullSize As
> Integer) As Boolean
>
> Dim lintSize As Integer = 0
> Dim llogReadEverything As Boolean
> Dim lintCounter As Integer
>
> ReDim tbytBuffer(tintFullSize - 1)
>
> While Not llogReadEverything
> While Not tobjNetStream.DataAvailable
> Thread.CurrentThread.Sleep(50)
> End While
>
> lintSize += tobjNetStream.Read(tbytBuffer, 0, tintFullSize)
> If lintSize >= tintFullSize Then
> llogReadEverything = True
> End If
> End While
>
>
> Return True
> End Function
>
> A function like this gets zeroes from the stream when nonzero data was
> sent.
>
>
> Thanks!
> Arnhoffer Károly _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
--
Martin Hinks
http://www.m-s-d.net
More information about the Mono-devel-list
mailing list