Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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# NetworkStream.Read未获取空字节后的所有字节_C#_Sockets_Null_Byte_Networkstream - Fatal编程技术网

C# NetworkStream.Read未获取空字节后的所有字节

C# NetworkStream.Read未获取空字节后的所有字节,c#,sockets,null,byte,networkstream,C#,Sockets,Null,Byte,Networkstream,我正在制作一个应用程序,可以远程控制一个设备,比如一个摄像头(ScopiaXT5000-Radvision)。我需要向设备发送初始化命令,以便能够发送控制设备的AT命令 一旦我发送了初始化命令,服务器应该回复: 字符串形式 ??\0\0\0 AT[Read返回读取的字节数。您有一个10025字节的缓冲区,但在Read后缓冲区未满。您可能需要循环,直到读取所有需要的字节 它在调试时起作用,因为用额外的时间,网络流有时间完全接收结果,因此当调用Read时,所有数据都可用并放入缓冲区 参考资料:如果您

我正在制作一个应用程序,可以远程控制一个设备,比如一个摄像头(ScopiaXT5000-Radvision)。我需要向设备发送初始化命令,以便能够发送控制设备的AT命令

一旦我发送了初始化命令,服务器应该回复:
字符串形式


??\0\0\0 AT[
Read
返回读取的字节数。您有一个10025字节的缓冲区,但在
Read
后缓冲区未满。您可能需要循环,直到读取所有需要的字节

它在调试时起作用,因为用额外的时间,网络流有时间完全接收结果,因此当调用
Read
时,所有数据都可用并放入缓冲区


参考资料:

如果您从网络中读取而未存储读取方法返回的计数,则表明您犯了一个基本的编程错误。您好,EJP,感谢您向我提供有关从网络读取的信息,但是我将如何处理返回的计数?是否真的需要存储它?您能否给我一个示例,说明正在使用返回的unt?第四点是,您假设读取已填充缓冲区,而不是使用计数来确定缓冲区中有多少是上次读取的结果。这就是为什么您会看到奇怪的数据。读取后,您应该只使用返回计数指示的缓冲区。嗨,Kieren,感谢您的帮助快速响应..你能给我一个你所说的循环的例子吗?因为我试图循环我的
读取
,直到没有可用的数据,它只循环一次。另一个问题@Kieren,有没有办法等待网络流完全接收结果?我想这就是循环的作用?或者循环有什么功能直到您读取了所需的所有数据—例如,如果数据包的末尾有一个终止符,请继续读取,直到您获得该终止符为止
{
    TcpClient clientSocket = new System.Net.Sockets.TcpClient();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        msg("Client Started");                        
    }

    public void openSocket()
    { 
        if (clientSocket.Connected)
        {
            clientSocket.Close();
        }
        clientSocket = new System.Net.Sockets.TcpClient();
        clientSocket.Connect("10.0.3.202", 55003);
        label1.Text = "Client Socket Program - Server Connected ...";

    }

    private void btnSend_Click(object sender, EventArgs e)
    {
        openSocket();
        //header bytes and initAT bytes are the initialization command for me to send AT commands
        msg("Init: ");
        NetworkStream serverStream = clientSocket.GetStream();
        //header bytes to enable AT command
        byte[] header = {170,170,0,0,0,8 };
        serverStream.Write(header, 0, header.Length);
        serverStream.Flush();
        //Initialize the Interface
        byte[] initAT = System.Text.Encoding.ASCII.GetBytes("AT[&IPV\r"); 
        serverStream.Write(initAT,0, initAT.Length);
        serverStream.Flush();

        byte[] inStream = new byte[10025];
        serverStream.Read(inStream, 0, inStream.Length);
        string returndata = System.Text.Encoding.ASCII.GetString(inStream);
        msg("Data from Server : " + returndata);
    }

    private void btnRight_Click(object sender, EventArgs e)
    {
        msg("Right : ");
        NetworkStream serverStream = clientSocket.GetStream();
        //AT Command to move the main camera to right
        byte[] outStream3 = System.Text.Encoding.ASCII.GetBytes("AT[&SY011R\r");
        serverStream.Write(outStream3, 0, outStream3.Length);

        byte[] inStream2 = new byte[48];
        serverStream.Read(inStream2, 0,inStream2.Length);
        string returndata = System.Text.Encoding.ASCII.GetString(inStream2);            
        msg(returndata);
    }           

    public void msg(string mesg)
    {
        textBox1.Text = textBox1.Text + Environment.NewLine + " >> " + mesg;
    }


}