Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in
- From: "Stressed Out Developer" <StressedOutDeveloper@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Thu, 5 May 2005 10:08:05 -0700
"Paul G. Tobey [eMVP]" wrote:
> I doubt that it's a 'bug', although it might be something which is
> unsupported. Can you send a smaller example that shows the problem. Bits
> and pieces of code aren't really helpful in this situation.
>
> You're saying that the Windows CE device connects to the server or the
> server connects to the Windows CE device with a stream socket? The Windows
> CE device then opens a datagram socket and receives data from the server?
> Remember that ReceiveFrom() doesn't prevent you from receiving from other
> hosts; it just returns which host the packet came from. What is the network
> physical layer here? Ethernet? Wireless Ethernet?
>
> Paul T.
>
> "Stressed Out Developer" <StressedOutDeveloper@xxxxxxxxxxxxxxxxxxxxxxxxx>
> wrote in message news:E0D2D9A8-E06A-4F68-9E9F-24D7AFC0BC07@xxxxxxxxxxxxxxxx
> >I have an application that we are porting from Unmanaged C++ to VB.NET
> > that involves sockets. There are two pieces to the code. One piece is
> > a one to one TCP call to a server which is working fine. The second
> > piece receives streaming data from the server on a regular basis via
> > UDP. My problem is that I can not make the ReceiveFrom call work.
> > This code is multithreaded and I don't know if that has any bearing on
> > it or not.
> >
> > First off, I make a call to the function "OpenStreaming" which does the
> > following:
> >
> > m_StreamSocket = New Socket(AddressFamily.InterNetwork,
> > SocketType.Dgram, ProtocolType.Udp)
> >
> > Dim sockaddr_in As New
> > System.Net.SocketAddress(AddressFamily.InterNetwork)
> > Dim sep As New System.Net.IPEndPoint(System.Net.IPAddress.Any, nPort)
> > globalPort = nPort
> > m_StreamSocket.Bind(sep.Create(sockaddr_in))
> >
> > Dim stws As New StreamThreadWithState(Me)
> > m_hStreamThread = New System.Threading.Thread(AddressOf
> > stws.StreamThread)
> > m_hStreamThread.Start()
> >
> > "StreamThread" runs with the following code:
> >
> > While (1)
> >
> > Dim nResult As System.Int32
> >
> > ' Call StreamHandler(), the main worker function of
> > this thread
> > nResult = pThis.StreamHandler
> >
> > ' Check for error. Timeout errors are okay in this
> > instance.
> > If (((O22SIOMM.SIOMM_OK <> nResult) And
> > (O22SIOMM.SIOMM_TIME_OUT <>
> > nResult))) Then
> > Exit While
> > End If
> >
> > ' Check flag to see if we should keep looping
> > If pThis.m_bListenToStreaming = False Then
> > ' Stop looping
> > nResult = O22SIOMM.SIOMM_OK
> > Exit While
> > End If
> >
> > ' Check the timeouts of all stream items
> >
> > pThis.CheckStreamTimeouts()
> >
> > pThis.m_hStreamThread.Sleep(1)
> >
> > End While
> >
> > The "StreamHandler" code is as follows:
> >
> > Dim ecode As Int32
> > Dim nResult As System.Int32
> > Dim bCriticalSectionFlag As Boolean = True
> >
> > Try
> > If (m_StreamSocket Is Nothing) Then
> > StreamHandler = SIOMM_ERROR_NOT_CONNECTED
> > Exit Function
> > End If
> > Catch e As SocketException
> > m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> > ".StreamHandler",
> > e.Message, e.ErrorCode)
> > StreamHandler = SIOMM_TIME_OUT
> > Exit Function
> > Catch e As ObjectDisposedException
> > m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> > ".StreamHandler",
> > e.Message)
> > StreamHandler = SIOMM_TIME_OUT
> > Exit Function
> > Catch e As Exception
> > m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> > ".StreamHandler",
> > e.Message)
> > StreamHandler = SIOMM_TIME_OUT
> > Exit Function
> > End Try
> >
> > ' Creates an IpEndPoint to capture the identity of the
> > sending host.
> > Dim sender As New
> > System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
> > Dim SourceAddr As System.Net.EndPoint = CType(sender,
> > System.Net.EndPoint)
> > Try
> > Dim lep As System.Net.EndPoint
> > Dim lipep As System.Net.IPEndPoint
> > Dim lip As System.Net.IPAddress
> > lip = New
> > System.Net.IPAddress(System.Net.IPAddress.Parse(System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName).AddressList(0).ToString()).Address)
> > lipep = New System.Net.IPEndPoint(lip, globalPort)
> > lep = lipep
> > ' lep = New
> > System.Net.IPEndPoint(lip, globalPort)
> > ' lep = New
> > System.Net.IPEndPoint(System.Net.IPAddress.Any,
> > globalPort)
> > ' m_StreamSocket.Bind(lep)
> > Dim testbytes() As Byte
> > ReDim testbytes(100)
> > Dim idx
> > For idx = LBound(testbytes) To UBound(testbytes)
> > testbytes(idx) = New Byte
> > testbytes(idx) = 0
> > Next idx
> > 'm_StreamSocket.SendTo(testbytes, SourceAddr)
> > 'Result =
> > m_StreamSocket.ReceiveFrom(m_pbyLastStreamBlock,
> > m_nStreamLength, SocketFlags.None, SourceAddr)
> >
> > 'NOTE: I have already called BIND from OpenStreaming function
> > 'HERE IS WHERE I BLOW UP
> > nResult =
> > m_StreamSocket.ReceiveFrom(m_pbyLastStreamBlock, 660,
> > SocketFlags.None, SourceAddr)
> > Catch e As SocketException
> > m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> > ".StreamHandler",
> > "m_StreamSocket.Bind : " & e.Message, e.ErrorCode)
> > nResult = e.ErrorCode
> > StreamHandler = SIOMM_ERROR
> > Exit Function
> > Catch e As ObjectDisposedException
> > StreamHandler = SIOMM_ERROR
> > m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> > ".StreamHandler",
> > "m_StreamSocket.Bind : " & e.Message)
> > Exit Function
> > Catch e As Exception
> > m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> > ".StreamHandler",
> > "m_StreamSocket.Bind : " & e.Message)
> > StreamHandler = SIOMM_ERROR
> >
> > Exit Function
> > End Try
> >
> > Next I make a call to "StartStreamListening" which does: (I don't think
> > this is important because I am not even getting data from the server
> > yet because of the receiveFrom failure)
> >
> > m_StreamCriticalSection.WaitOne()
> > Checks a list of classes for data. Each class is supposed to have data
> > or they will not be in the list
> > m_StreamCriticalSection.ReleaseMutex()
> >
> > I have to ship this product by Friday 5/6/2005 and I am panicking
> > because this function is the only item left to port before thorough
> > testing can begin.
> >
> > Please , Please, Please can someone help.
> >
> > This is being run on Windows CE but when I run it on my desktop as a
> > normal
> > windows app, I don't get the invalidoperationException. Is this a bug in
> > compact frameworks?
> >
> > Thanks,
> > Mike Dixon
>
>
>
Paul,
Thanks for your response. It will take me a few minutes to get a
simple example built and then I will post it. To answer your other
questions:
You are correct that the WinCE device opens a datagram socket and will
receive data from the server (when receiveFrom or alternative works). This
is a closed network so there will only be one server on it and in the case of
multiple servers, we will be coding for that. The network is a cat5 based
ethernet system that is totally isolated from the rest of the world. I will
post some shorter code in a few minutes.
Thanks,
Mike Dixon
.
- Follow-Ups:
- Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in
- From: Paul G. Tobey [eMVP]
- Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in
- References:
- URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- From: Stressed Out Developer
- Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- From: Paul G. Tobey [eMVP]
- URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- Prev by Date: Re: app icon in start menu
- Next by Date: Re: Testing that the DllImport worked just fine.
- Previous by thread: Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- Next by thread: Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in
- Index(es):
Relevant Pages
|