Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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
以单字节数组(通过TCP)C#发送多个图像的简单方法?_C#_Arrays_Sockets_Tcp - Fatal编程技术网

以单字节数组(通过TCP)C#发送多个图像的简单方法?

以单字节数组(通过TCP)C#发送多个图像的简单方法?,c#,arrays,sockets,tcp,C#,Arrays,Sockets,Tcp,问题是:我已经成功地安装了一个应用程序,它可以从手机中提取单个视频帧并将其移动到服务器。但正如您所知,固有的延迟不允许在服务器端进行平滑转换。我猜我需要在一个单字节数组中打包一些图像,然后在服务器端解包。但是有没有一种干净/简单的方法可以做到这一点?我可以使用多维数组吗?还有别的吗 以下是我在客户端得到的(有效负载是转换为单字节数组的传入映像): 只要您的映像大于tcp包大小(我认为在Windows上默认为1024),您就无法在一次发送/接收中发送多个映像 但是,每个套接字连接发送多个映像很有用

问题是:我已经成功地安装了一个应用程序,它可以从手机中提取单个视频帧并将其移动到服务器。但正如您所知,固有的延迟不允许在服务器端进行平滑转换。我猜我需要在一个单字节数组中打包一些图像,然后在服务器端解包。但是有没有一种干净/简单的方法可以做到这一点?我可以使用多维数组吗?还有别的吗

以下是我在客户端得到的(有效负载是转换为单字节数组的传入映像):


只要您的映像大于tcp包大小(我认为在Windows上默认为1024),您就无法在一次发送/接收中发送多个映像

但是,每个套接字连接发送多个映像很有用,因为这样可以避免多次连接握手的开销


在优化包之前,请尝试在同一套接字连接上一个接一个地发送多个映像。

只要您的映像大于tcp包大小(我认为在Windows上默认为1024),您就无法在一次发送/接收中发送多个映像

但是,每个套接字连接发送多个映像很有用,因为这样可以避免多次连接握手的开销


在优化包之前,请尝试在同一套接字连接上一个接一个地发送多个映像。

只要您的映像大于tcp包大小(我认为在Windows上默认为1024),您就无法在一次发送/接收中发送多个映像

但是,每个套接字连接发送多个映像很有用,因为这样可以避免多次连接握手的开销


在优化包之前,请尝试在同一套接字连接上一个接一个地发送多个映像。

只要您的映像大于tcp包大小(我认为在Windows上默认为1024),您就无法在一次发送/接收中发送多个映像

但是,每个套接字连接发送多个映像很有用,因为这样可以避免多次连接握手的开销


在优化软件包之前,请尝试在同一个套接字连接上一个接一个地发送多个图像。

+1-开发人员的工作方式令人惊讶。在使用打开/关闭协议时,抱怨TCP延迟。感谢回答nvoigt。Martin,我们有些开发人员不习惯socket编程。这是我第一次尝试这样的冒险,所以我真的是在黑暗中拍摄,边走边学习。我已经习惯了web开发,我们唯一需要做的延迟优化就是创造性的开发。在使用打开/关闭协议时,抱怨TCP延迟。感谢回答nvoigt。Martin,我们有些开发人员不习惯socket编程。这是我第一次尝试这样的冒险,所以我真的是在黑暗中拍摄,边走边学习。我已经习惯了web开发,我们唯一需要做的延迟优化就是创造性的开发。在使用打开/关闭协议时,抱怨TCP延迟。感谢回答nvoigt。Martin,我们有些开发人员不习惯socket编程。这是我第一次尝试这样的冒险,所以我真的是在黑暗中拍摄,边走边学习。我已经习惯了web开发,我们唯一需要做的延迟优化就是创造性的开发。使用打开/关闭协议时抱怨TCP延迟。感谢您的回答nvoigt。Martin,我们有些开发人员不习惯socket编程。这是我第一次尝试这样的冒险,所以我真的是在黑暗中拍摄,边走边学习。我已经习惯了web开发,我们唯一要做的延迟优化就是创造性的开发。
if (_socket != null)
        {
            SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();

            socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;
            socketEventArg.UserToken = null;

            socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
            {
                response = e.SocketError.ToString();

                // Unblock the UI thread
                _clientDone.Set();
            });


            socketEventArg.SetBuffer(payload, 0, payload.Length);
            _clientDone.Reset();

            _socket.SendAsync(socketEventArg);                
            _clientDone.WaitOne(TIMEOUT_MILLISECONDS);
        }
        const int portNo = portNumber;

        TcpListener listener = new TcpListener(portNo);
        listener.Start();
        Console.WriteLine("Listening...");

        TcpClient tcpClient = listener.AcceptTcpClient();
        NetworkStream NWStream = tcpClient.GetStream();
        byte[] bytesToRead = new byte[tcpClient.ReceiveBufferSize + 1];
        FrameCount += 1;


        int numBytesRead = NWStream.Read(bytesToRead, 0, Convert.ToInt32(tcpClient.ReceiveBufferSize));

        string FILE_NAME = "c:\\frames\\" + FrameCount.ToString() + ".gif";
        System.IO.FileStream fs = null;
        fs = new FileStream(FILE_NAME, FileMode.CreateNew, FileAccess.Write);
        fs.Write(bytesToRead, 0, numBytesRead);
        fs.Close();

        tcpClient.Close();
        listener.Stop();

        StartImage();