以单字节数组(通过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();