Бір клиентке арналған .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
Сізге рахмет айтсам болады ма?
қосылды автор interDist, көзі
Кодты оқырмандармен/жазушылармен кезектесу кезектерімен және т.б. қайта өңдеу туралы не деуге болады?
қосылды автор L.B, көзі
Ex үшін, желіден деректерді оқитын және queueA деп қойған ағын, басқа <thread> queueB -дан оқиды және желілерге жібереді. Сонымен қатар, queueA -дан оқып, queueB -қа жазады. PS: Кезекте кезекте клиент пен сервер арасындағы толық хабарды ұстап тұрмын деп есептеймін
қосылды автор L.B, көзі

Жауап жоқ

0