приложение-клиент / сервер с TCPClient

Добрый день, я разрабатываю приложение, которое общается с ящиком контроля и получает данные самой. ящик контроля посылает мне сюжет в ascii, с которой я определяю, если датчик покрылся или bucla топтался, и он послал ему сюжет в ascii, чтобы контролировать 2 семафора. comuniacion, который я использую, - путь сериал / Ethernet с конвертером. проблема, которая у меня есть, состоит в том, что с классом TCPclient, я могу посылать данные в ящик контроля без проблем, но когда я хочу получить данные той же самой используя tcplistener, у меня появляется сообщение: introducir la descripción de la imagen aquí

коммуникация с ящиком контроля имеет постоянную форму а именно, которую я получаю, и посланный данные в то же время. как я могу решать эту проблему, если я могу посылать, из-за которого я не могу получать без проблем, что я врежу?

им присоединил фрагмент кода, что я, стоивший получение данных и меня бросает ошибка.

Public Class RecebirDato
Public Delegate Sub ClientCarrier(conexionTcp As ConexionTCP)
Public Event OnClientConnected As ClientCarrier
Public Event OnClientDisconnected As ClientCarrier
Public Delegate Sub DataRecieved(conexionTcp As ConexionTCP, data As String)
Public Event OnDataRecieved As DataRecieved
Public Shared _tcpListener As TcpListener
Public Shadows _acceptThread As Thread
Private connectedClients As New List(Of ConexionTCP)

Public Sub New()
    AddHandler OnDataRecieved, AddressOf MensajeRecibido
    AddHandler OnClientConnected, AddressOf ConexionRecibida
    AddHandler OnClientDisconnected, AddressOf ConexionCerrada
End Sub

Private Sub MensajeRecibido(conexionTcp As ConexionTCP, datos As String)
    Dim paquete = New Paquete(datos)
    Dim valor As String
    Dim principal As New Principal
    Dim contenido As String = paquete.Contenido
    Dim valores As List(Of String) = Mapa.Deserializar(contenido)
    valor = valores(0)
    Dim msgPack = New Paquete(valor)
    conexionTcp.EnviarPaquete(msgPack)
    principal.txtObservaciones.Text = valor
End Sub

Private Sub ConexionRecibida(conexionTcp As ConexionTCP)
    SyncLock connectedClients
        If Not connectedClients.Contains(conexionTcp) Then
            connectedClients.Add(conexionTcp)
        End If
    End SyncLock
    'Invoke(New Action(Function() InlineAssignHelper(label1.Text, String.Format("Clientes: {0}", connectedClients.Count))))
End Sub

Private Sub ConexionCerrada(conexionTcp As ConexionTCP)
    SyncLock connectedClients
        If connectedClients.Contains(conexionTcp) Then
            Dim cliIndex As Integer = connectedClients.IndexOf(conexionTcp)
            connectedClients.RemoveAt(cliIndex)
        End If
    End SyncLock
    'Invoke(New Action(Function() InlineAssignHelper(label1.Text, String.Format("Clientes: {0}", connectedClients.Count))))
End Sub

Public Sub EscucharClientes(_ipAddress As String, _port As Integer)
    Try
        _tcpListener = New TcpListener(IPAddress.Parse(_ipAddress), _port)
        _tcpListener.Start()
        _acceptThread = New Thread(AddressOf AceptarClientes)
        _acceptThread.Start()
    Catch e As Exception
        MessageBox.Show(e.Message.ToString())
    End Try
End Sub

Private Sub AceptarClientes()
    Do
        Try
            Dim conexion = _tcpListener.AcceptTcpClient()
            Dim srvClient = New ConexionTCP(conexion)
            With srvClient
                .ReadThread = New Thread(AddressOf LeerDatos)
            End With
            srvClient.ReadThread.Start(srvClient)
            RaiseEvent OnClientConnected(srvClient)
        Catch e As Exception
            MessageBox.Show(e.Message.ToString())
        End Try
    Loop While True
End Sub

Private Sub LeerDatos(client As Object)
    Dim cli = TryCast(client, ConexionTCP)
    Dim charBuffer = New List(Of Integer)()
    Do
        Try
            If cli Is Nothing Then
                Exit Try
            End If
            If cli.streamReader.EndOfStream Then
                Exit Try
            End If
            Dim charCode As Integer = cli.streamReader.Read()
            If charCode = -1 Then
                Exit Try
            End If
            If charCode <> 0 Then
                charBuffer.Add(charCode)
                Continue Do
            End If
            If OnDataRecievedEvent IsNot Nothing Then 
                Dim chars = New Char(charBuffer.Count - 1) {}
                For i As Integer = 0 To charBuffer.Count - 1
                    chars(i) = Convert.ToChar(charBuffer(i))
                Next i
                Dim message = New String(chars)
                RaiseEvent OnDataRecieved(cli, message)
            End If
            charBuffer.Clear()
        Catch generatedExceptionName As IOException
            Exit Try
        Catch e As Exception
            MessageBox.Show(e.Message.ToString())
            Exit Try
        End Try
    Loop While True
    RaiseEvent OnClientDisconnected(cli)
End Sub

End Class

заранее спасибо за Вашу помощь.

0
задан 05.01.2017, 19:12
0 ответов