如何:使用匿名管道在本地进程之间进行通信(C#)
来源:互联网 发布:fft算法c语言实现详解 编辑:程序博客网 时间:2024/06/05 15:01
匿名管道提供的功能比命名管道少,但它需要的系统开销也少。您可以使用匿名管道更加轻松地在本地计算机上进行进程间通信。不能使用匿名管道通过网络进行通信。
示例
下面的示例演示使用匿名管道将字符串从父进程发送到子进程的方式。此示例使用Out的PipeDirection值在父进程中创建一个AnonymousPipeServerStream对象。然后,父进程通过使用客户端句柄创建一个AnonymousPipeClientStream对象来创建一个子进程。该子进程的In值为PipeDirection。
然后,父进程将用户提供的字符串发送给子进程。该字符串将显示在子进程中的控制台上。
下面的示例演示服务器进程。
using System;
using System.IO;
using System.IO.Pipes;
using System.Diagnostics;
class PipeServer
{
staticvoid Main()
{
Process pipeClient = new Process();
pipeClient.StartInfo.FileName = "pipeClient.exe";
using (AnonymousPipeServerStream pipeServer =
new AnonymousPipeServerStream(PipeDirection.Out,
HandleInheritability.Inheritable))
{
// Show that anonymous pipes do not support Message mode.
try
{
Console.WriteLine("[SERVER] Setting ReadMode to \"Message\".");
pipeServer.ReadMode = PipeTransmissionMode.Message;
}
catch (NotSupportedException e)
{
Console.WriteLine("[SERVER] Exception:\n {0}", e.Message);
}
Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
pipeServer.TransmissionMode);
// Pass the client process a handle to the server.
pipeClient.StartInfo.Arguments =
pipeServer.GetClientHandleAsString();
pipeClient.StartInfo.UseShellExecute = false;
pipeClient.Start();
pipeServer.DisposeLocalCopyOfClientHandle();
try
{
// Read user input and send that to the client process.
using (StreamWriter sw =new StreamWriter(pipeServer))
{
sw.AutoFlush = true;
// Send a 'sync message' and wait for client to receive it.
sw.WriteLine("SYNC");
pipeServer.WaitForPipeDrain();
// Send the console input to the client process.
Console.Write("[SERVER] Enter text: ");
sw.WriteLine(Console.ReadLine());
}
}
// Catch the IOException that is raised if the pipe is broken
// or disconnected.
catch (IOException e)
{
Console.WriteLine("[SERVER] Error: {0}", e.Message);
}
}
pipeClient.WaitForExit();
pipeClient.Close();
Console.WriteLine("[SERVER] Client quit. Server terminating.");
}
}
下面的示例演示客户端进程。服务器进程启动客户端进程,并为该进程提供一个客户端句柄。应该将从客户端代码得到的可执行文件命名为pipeClient.exe并在运行该服务器进程之前将其复制到服务器可执行文件所在的目录中。
using System;
using System.IO;
using System.IO.Pipes;
class PipeClient
{
staticvoid Main(string[] args)
{
if (args.Length > 0)
{
using (PipeStream pipeClient =
new AnonymousPipeClientStream(PipeDirection.In, args[0]))
{
// Show that anonymous Pipes do not support Message mode.
try
{
Console.WriteLine("[CLIENT] Setting ReadMode to \"Message\".");
pipeClient.ReadMode = PipeTransmissionMode.Message;
}
catch (NotSupportedException e)
{
Console.WriteLine("[CLIENT] Execption:\n {0}", e.Message);
}
Console.WriteLine("[CLIENT] Current TransmissionMode: {0}.",
pipeClient.TransmissionMode);
using (StreamReader sr =new StreamReader(pipeClient))
{
// Display the read text to the console
string temp;
// Wait for 'sync message' from the server.
do
{
Console.WriteLine("[CLIENT] Wait for sync...");
temp = sr.ReadLine();
}
while (!temp.StartsWith("SYNC"));
// Read the server data and echo to the console.
while ((temp = sr.ReadLine()) !=null)
{
Console.WriteLine("[CLIENT] Echo: " + temp);
}
}
}
}
Console.Write("[CLIENT] Press Enter to continue...");
Console.ReadLine();
}
}
- 如何:使用匿名管道在本地进程之间进行通信(C#)
- C#使用匿名管道在本地进程之间进行通信
- 使用命名管道通过网络在进程之间进行通信(C#)
- Linux c 匿名管道实例—创建两个子进程与父进程进行管道通信
- C#使用命名管道通过网络在进程之间进行通信
- 进程通信-匿名管道
- 进程通信 - 匿名管道
- 利用匿名管道技术实现本地进程通信
- 匿名管道实现父子进程之间的通信....
- 进程通信系列-匿名管道
- 进程间通信-匿名管道
- 进程间通信 - 匿名管道
- 进程通信_匿名管道
- 进程间通信匿名管道
- 【Linux】 进程通信--匿名管道
- 进程间通信-匿名管道
- linux进程间的通信(C): 匿名管道
- 进程通信:匿名管道和命名管道
- 提高java代码运行效率(5)
- Authentic Jobs:有创造力的Web开发者来这里找工作
- android user_tag.mk与user编译模式
- Team Foundation Server 2010 安装配置详细图文教程
- mx51 IPU 透明处理
- 如何:使用匿名管道在本地进程之间进行通信(C#)
- UDP、TCP、调用WebService、序列化、数据库设计范式、聚簇索引、非聚簇索引
- linux下CDPATH环境变量的应用
- JS操作cookie
- android 应用程序Activity之间数据传递与共享的几种途径
- 组件服务里面Microsoft Excel,点击右键以后没有属性。
- 《大规模c++程序设计》笔记
- 路径,文件,目录,I/O常见操作汇总
- 侵入式和非侵入式的区别