.NET TcpClient异步和同步读取同一客户端

时间:2011-10-28 21:51:29

标签: .net tcpclient

以下是场景:对于服务器 - 客户端应用程序,客户端应始终处于从服务器广播的消息的侦听循环中。为此,我使用TcpClient.GetStream().BeginRead()异步方法和回调:

Private Sub OnDataArrival(ByVal ar As IAsyncResult)
    Dim count As Integer
    Try
        count = Me.mTCPSocket.GetStream().EndRead(ar)
        If count < 1 Then _
            Throw New System.Net.Sockets.SocketException()

        ' ...

        Me.mTCPSocket.GetStream().BeginRead(dataBuffer, 0, dataBuffer.Length, _
                                            AddressOf OnDataArrival, Nothing)
    Catch ex As Exception
        OnDisconnect()
    End Try
End Sub

但是,客户端有时也需要与服务器通信,即发送消息并接收响应(当广播消息发送到每个其他客户端时,特定响应仅发送给请求客户端)。 /> 目前,在我的实施中,客户通过阻止呼叫启动对话,例如,

    With (New IO.StreamWriter(Me.mTCPSocket.GetStream()))
        .Write(message & ControlChars.Cr)
        .Flush()
    End With

并且可以阻止线程阻塞,直到从服务器收到响应为止。

然而,这就是我被困住的地方。从理论上讲,我需要在这里进行阻塞读取,但这会干扰正在进行的异步读取。那么实现理想行为的最佳方式是什么?

0 个答案:

没有答案