C# 在不关闭管道的情况下持续监听管道
我有一个32位winform应用程序将jpeg图像发送到64位winform应用程序。 我使用管道(IPC) 我不想关闭服务器管道并重新打开它,而是希望它保持打开状态,并在图像通过时进行处理 我想知道以下代码是否正确?另外,我如何知道何时收到完整字节数据包?我是否必须在客户端调用代码的字节数组中放入一个“头”,头4个字节保持整个字节数组/数据包的大小,就像我在套接字中一样?有没有更简单的方法来处理管道 这是我的服务器管道代码:C# 在不关闭管道的情况下持续监听管道,c#,named-pipes,C#,Named Pipes,我有一个32位winform应用程序将jpeg图像发送到64位winform应用程序。 我使用管道(IPC) 我不想关闭服务器管道并重新打开它,而是希望它保持打开状态,并在图像通过时进行处理 我想知道以下代码是否正确?另外,我如何知道何时收到完整字节数据包?我是否必须在客户端调用代码的字节数组中放入一个“头”,头4个字节保持整个字节数组/数据包的大小,就像我在套接字中一样?有没有更简单的方法来处理管道 这是我的服务器管道代码: static NamedPipeServerStream p
static NamedPipeServerStream pipeServer = null;
public static void WaitForConnectionCallBack(IAsyncResult iar)
{
pipeServer = (NamedPipeServerStream)iar.AsyncState;
pipeServer.EndWaitForConnection(iar);
while (pipeServer != null)
{
if (pipeServer.IsConnected == true)
{
byte[] imageData = new byte[100000];
pipeServer.Read(imageData, 0, imageData.Length);
//do stuff with data
}
}
}
static string _pipeName = "";
public static void Listen(string PipeName)
{
// Set to class level var so we can re-use in the async callback method
_pipeName = PipeName;
// Create the new async pipe
NamedPipeServerStream pipeServer = new NamedPipeServerStream(PipeName,
PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
// Wait for a connection
pipeServer.BeginWaitForConnection(new AsyncCallback(WaitForConnectionCallBack), pipeServer);
}
您好,我认为添加带有数组长度/大小的标题是很好的
也许可以添加一个校验和什么的HI Max,是的,这就是我传统上使用套接字的方式。我以前从未使用过管道,所以我想知道是否还有其他选择。我会让这个问题持续一段时间:)@AndrewSimpson必须这样做并不是套接字所特有的。硬盘上的管道、套接字甚至文件都是“流”,如果您想通过它们传输数据,您需要一种带有分隔符的预定义格式(例如查看流中是否有
\0
或\r\n
),或者您需要显示字段大小的标题信息。@ScottChamberlain HI,谢谢你的澄清。有意义。重要注意事项是,当您重新编写此文件时,int-Read(byte[]buffer,int-offset,int-length)
最多只能读取length
字节。你需要检查函数返回的结果,它会告诉你有多少字节真正被读取并保存到缓冲区@ScottChamberlain中,你说的很有道理。谢谢:)