2016-07-28 2 views
0

Я читаю данные через TCP с камеры, я сначала посылаю триггер через TCP, чтобы сделать снимок, затем я прочитал изображение камеры. Все работает штрафы до 296 триггеров, с этого момента программа блокируется при первом чтении TCP.Чтение данных TCP с камеры останавливается после определенного количества снимков

Я могу временно исправить это, отправив снова триггер (из другой программы). Я считаю, что в этот момент камера срабатывает 2 раза (возможно, заблокированная и новый триггер (для исправления)).

У кого-нибудь есть идея, что может пойти не так? Спасибо!

'Code in Timer 
    'Trigger 
    Dim tcpClient As New System.Net.Sockets.TcpClient() 
    tcpClient.Connect("ip", port) 
    Dim networkStream As NetworkStream = tcpClient.GetStream() 
    If networkStream.CanWrite Then 
     networkStream.Write(dataTrigger, 0, n) 
     tcpClient.Close() 
    Else 

     If Not networkStream.CanWrite Then 
      Console.WriteLine("cannot read data from this stream") 
      tcpClient.Close() 
     End If 
    End If 
    networkStream.Close() 

    'Read images 
    Dim tcpClient As New System.Net.Sockets.TcpClient() 
    tcpClient.Connect("ip", port) 
    Dim networkStream As NetworkStream = tcpClient.GetStream() 
    If networkStream.CanRead Then 
     ' Reading data length 
     Dim dataLength(15) As Byte 
     networkStream.Read(dataLength, 0, 16) 

     ' Reading all data 
     Dim bytesReaded, bytesLeft, bytesCounter As Integer 
     bytesCounter = 0 
     bytesLeft = dataLength 
     Do While bytesLeft > 0 
      bytesReaded = networkStream.Read(dataImages, bytesCounter, bytesLeft) 
      bytesCounter = bytesCounter + bytesReaded 
      bytesLeft = dataLengthInt - bytesCounter 
     Loop 
     tcpClient.Close() 
    Else 
     If Not networkStream.CanRead Then 
      Console.WriteLine("cannot not write data to this stream") 
      tcpClient.Close() 
     End If 
    End If 
    networkStream.Close() 

ответ

0

networkStream.Read(dataLength, 0, 16) не гарантируется, чтобы прочитать все данные в одном чтении. вам нужно зациклиться до 16 байтов, как и в вашем основном цикле.

Также вы делаете bytesLeft = dataLengthInt - bytesCounter, но нет, где в вашем коде вы присваиваете значение dataLengthInt.

Я не знаю, есть ли у вас другие ошибки (я не очень хорошо знаком с VB.NET), но те, где вышли самые большие из них.

+0

Спасибо, это может быть причиной, хотя я думаю, что это не блокирует функцию. Преобразование dataLengthInt не учитывается. –

Смежные вопросы