Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用TCP从IP摄像头读取所有数据_C#_Visual Studio_Tcp_Tcpclient_Tcp Ip - Fatal编程技术网

C#使用TCP从IP摄像头读取所有数据

C#使用TCP从IP摄像头读取所有数据,c#,visual-studio,tcp,tcpclient,tcp-ip,C#,Visual Studio,Tcp,Tcpclient,Tcp Ip,我有IP摄像头和 我无法从这台相机读取图像数据。 要读取图像,我必须向摄像头发送命令并读取: 1) 电报长度 2) 响应ID获取图像 3) 错误代码 4) 图像类型 5) 图像结果 6) 行数、列数 7) 图像数据 从第1点到第6点读取数据没有问题,因为这只有14个字节。 在第6点中,我读取了图像的大小。例如,让我们计算行数 列将是640x480,因此我们有307200字节 要读取图像,我正在使用Visual Studio 2010和WindowsForm应用程序 和操作窗体按钮: privat

我有IP摄像头和 我无法从这台相机读取图像数据。 要读取图像,我必须向摄像头发送命令并读取: 1) 电报长度 2) 响应ID获取图像 3) 错误代码 4) 图像类型 5) 图像结果 6) 行数、列数 7) 图像数据

从第1点到第6点读取数据没有问题,因为这只有14个字节。 在第6点中,我读取了图像的大小。例如,让我们计算行数 列将是640x480,因此我们有307200字节

要读取图像,我正在使用Visual Studio 2010和WindowsForm应用程序 和操作窗体按钮:

private void butReadImage_Click(object sender, EventArgs e)
{
     // code to read data from point 1 to 6
     // start read data image (point 7)

}
butReadImage\单击
我只能读取7000字节的图像数据
因为相机不会在一个包中发送所有图像数据。
要读取所有数据,我在
中启用计时器(间隔1ms),但请单击
然后使用

     private void timReadImage_Tick(object sender, EventArgs e)
     {
            // read rest data form camera, about two data packets
            int numberOfBytesRead;
            while (rwSensorStream.DataAvailable)
            {
                numberOfBytesRead = rwSensorStream.Read(BinaryImageData_Byte_14_n, 0, BinaryImageData_Byte_14_n.Length);
                tempRC = tempRC + numberOfBytesRead;

                for (int i = 0; i < numberOfBytesRead; i++)
                {
                    image.Add(BinaryImageData_Byte_14_n[i]);
                }
            }
     }
private void timReadImage\u勾选(对象发送方,事件参数e)
{
//从相机读取rest数据,大约两个数据包
整数字节读取;
while(rwSensorStream.DataAvailable)
{
numberOfBytesRead=rwSensorStream.Read(二进制图像数据字节长度,0,二进制图像数据字节长度);
tempRC=tempRC+numberOfBytesRead;
for(int i=0;i

我现在知道这是使用计时器的错误代码。有人知道如何读取多个包中发送的所有数据吗

异步读取数据。您必须弄清楚while循环条件应该是什么,以便为单个映像循环正确的次数,但是等待ReadAsync从流中获取数据将允许代码在继续之前等待完整的传输

public async Task getData(NetworkStream rwSensorStream) {
    while (true) {
        byte[ ] buffer = new byte[numberOfBytesAtOnce];
        int read = await rwSensorStream.ReadAsync(buffer, 0, buffer.Length); 
        //wait for next package

        if (read > 0) {
          // data received, process it 
        } 
        else break;  // will occur when connection is broken
    }
}
您可以1)阻塞当前正在执行的代码,直到读取所有数据;2)异步读取数据。