我试图使用namedpipes将图像发送到另一台电脑 我们正在使用此代码:
byte[] DataToBeSend;
NamedPipeClientStream PipeClient =
new NamedPipeClientStream(_Nombre, _Pipe,
PipeAccessRights.FullControl, PipeOptions.None, TokenImpersonationLevel.None,
HandleInheritability.None);
DataToBeSend = BitConverter.GetBytes(_Dato.Length);
int HL = _Dato.Length;
int Longitud = BitConverter.ToInt32(_Dato, 0);
PipeClient.Connect();
Console.WriteLine("Conected");
PipeClient.Write(DataToBeSend, 0, DataToBeSend.Length);
PipeClient.WaitForPipeDrain();
PipeClient.Write(_Dato, 0,HL);
PipeClient.WaitForPipeDrain();
PipeClient.Close();
NamedPipeClientStream PipeClient =
new NamedPipeClientStream(_Nombre, _Pipe,
PipeAccessRights.FullControl, PipeOptions.None, TokenImpersonationLevel.None,
HandleInheritability.None);
DataToBeSend = BitConverter.GetBytes(_Dato.Length);
int HL = _Dato.Length;
int Longitud = BitConverter.ToInt32(_Dato, 0);
PipeClient.Connect();
Console.WriteLine("Conected");
PipeClient.Write(DataToBeSend, 0, DataToBeSend.Length);
PipeClient.WaitForPipeDrain();
PipeClient.Write(_Dato, 0,HL);
PipeClient.WaitForPipeDrain();
PipeClient.Close();
我发送缓冲区的长度然后缓冲区(包含图像的字节)问题是该图像是100 MB并且命名管道不能发送如大信息,什么是最好的解决方案这个问题?有一个metod能够将这个缓冲区转换成一个较小的缓冲区!
答案 0 :(得分:0)
您必须实施自己的流量控制。您需要将有效负载分解为更易于管理的块(可能大约1KB),并一次发送每个块(数据包)。
为了有效地执行此操作,您需要有效负载的标头才能知道如何在另一侧重新组装。您可能至少需要ID,Index和IsLast字段。
ID = A unique identifier indicating all packets that belong together
Index = The index of the packet in the group (same ID)
IsLast = Indicating this is the last packet of the group and you can now process as a whole