问题描述
我正在为将在同一主机上运行的2个应用程序实现IPC。 Console1和Console2。基于MS示例,我能够提出以下代码:
控制台1
private static string TextToSend;
private static MemoryMappedFile memoryMappedFile;
private static MemoryMappedViewAccessor accessor;
static void Main(string[] args)
{
using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap",10000))
{
bool mutexCreated;
Mutex mutex = new Mutex(true,"testmapmutex",out mutexCreated);
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(1);
}
mutex.ReleaseMutex();
Console.WriteLine("Start Process B and press ENTER to continue.");
Console.ReadLine();
Console.WriteLine("Start Process C and press ENTER to continue.");
Console.ReadLine();
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
Console.WriteLine("Process A says: {0}",reader.ReadBoolean());
Console.WriteLine("Process B says: {0}",reader.ReadBoolean());
Console.WriteLine("Process C says: {0}",reader.ReadBoolean());
}
mutex.ReleaseMutex();
}
OnLoad();
while (true)
{
Console.WriteLine("Enter message: ");
TextToSend = Console.ReadLine();
if (!String.IsNullOrEmpty(TextToSend))
{
SendMessage();
}
}
}
private static void OnLoad()
{
memoryMappedFile = MemoryMappedFile.CreateNew("testMap",10000);
accessor = memoryMappedFile.CreateViewAccessor();
}
private static void SendMessage()
{
var buffer = ASCIIEncoding.ASCII.GetBytes(TextToSend);
accessor.Write(54,(ushort)buffer.Length);
accessor.WriteArray(54 + 2,buffer,buffer.Length);
}
private static void ReadMessage()
{
var size = accessor.ReadUInt16(54);
var buffer = new byte[size];
accessor.ReadArray(54 + 2,buffer.Length);
Console.WriteLine(ASCIIEncoding.ASCII.GetString(buffer));
}
控制台2
private static string TextToSend;
private static MemoryMappedFile memoryMappedFile;
private static MemoryMappedViewAccessor accessor;
static void Main(string[] args)
{
try
{
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap"))
{
Mutex mutex = Mutex.OpenExisting("testmapmutex");
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream(1,0))
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(0);
}
mutex.ReleaseMutex();
}
}
catch (FileNotFoundException)
{
Console.WriteLine("Memory-mapped file does not exist. Run Process A first.");
}
Console.ReadLine();
}
private static void OnLoad()
{
memoryMappedFile = MemoryMappedFile.CreateNew("testMap",10000);
accessor = memoryMappedFile.CreateViewAccessor();
}
private static void SendMessage()
{
var buffer = ASCIIEncoding.ASCII.GetBytes(TextToSend);
accessor.Write(54,(ushort)buffer.Length);
accessor.WriteArray(54 + 2,buffer.Length);
}
private static void ReadMessage()
{
var size = accessor.ReadUInt16(54);
var buffer = new byte[size];
accessor.ReadArray(54 + 2,buffer.Length);
Console.WriteLine(ASCIIEncoding.ASCII.GetString(buffer));
}
我的问题是,如何使这2个应用程序中的每一个都等待对方的消息?意思是,一旦Console1发送一条消息,Console2就会获取该消息并将其写入控制台,反之亦然。谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)