2016-07-28 13 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)は、1回の読み取りですべてのデータを読み取ることが保証されていません。メインループと同じように16バイトまでループする必要があります。

また、あなたはbytesLeft = dataLengthInt - bytesCounterですが、あなたのコードではどこに値を割り当てますかdataLengthIntです。

他のエラーがあるかどうかわかりません(VB.NETはよくわかりませんが)が、飛び出した最大のものです。

+0

ありがとう、これは理由がありますが、私はこれが機能をブロックしないと考えています。 dataLengthInt変換は省略されています。 –

関連する問題