C#多进程通信之共享内存方式

共享内存方式应该最简单易用的

直接上代码,下面列出了2种,一种是映射视图,一种是映射流,任选一种即可

服务端:

MemoryMappedFile memoryAccessor = MemoryMappedFile.CreateNew("ProcessCommunicationAccessor", 500, MemoryMappedFileAccess.ReadWrite);//创建共享内存映射文件对象,第一个参数为映射的名称,与客户端需要对应,500为大小,单位为字节,MemoryMappedFileAccess为访问权限,是读写还是只读 只写,此处不能使用Using 否则脱离Using 就会释放,客户端无法获取到此名称的内存映射对象

using (var accessor = memoryAccessor.CreateViewAccessor())//获取映射文件对象的视图

{

var helo = Encoding.UTF8.GetBytes("Accessor");

accessor.WriteArray(0, helo, 0, helo.Length);//将给定的值写入此视图中

richTextBox1.Text += Environment.NewLine + "Accessor Send Val:Accessor";

}

MemoryMappedFile memoryStream = MemoryMappedFile.CreateNew("ProcessCommunicationStream", 500, MemoryMappedFileAccess.ReadWrite);//创建流的映射文件对象

using (var stream = memoryStream.CreateViewStream())//获取映射文件的流

{

var helo = Encoding.UTF8.GetBytes("Stream");

stream.Write(helo, 0, helo.Length);//将给定的值写入此内存流中

richTextBox1.Text += Environment.NewLine + "Accessor Send Val:Stream";

}

客户端:

对应上面也是有2种接收方式

MemoryMappedFile memoryAccessor = MemoryMappedFile.OpenExisting("ProcessCommunicationAccessor");//获取服务端定义的ProcessCommunicationAccessor名称的内存映射文件然后调用ReadArray方法读取到服务端写入的数据

using (var accessor = memoryAccessor.CreateViewAccessor())

{

var s = new byte[999];

var read = accessor.ReadArray(0, s, 0, s.Length);

var str = Encoding.UTF8.GetString(s);

richTextBox1.Text += Environment.NewLine + "Accessor Read Val:" + str.ToString();

}

MemoryMappedFile memoryStream = MemoryMappedFile.OpenExisting("ProcessCommunicationStream");//获取服务端定义的ProcessCommunicationStream名称的内存映射文件然后调用ReadToEnd方法读取到服务端写入的数据

using (var stream = memoryStream.CreateViewStream())

{

using (var reader = new StreamReader(stream))

{

var str = reader.ReadToEnd();

richTextBox1.Text += Environment.NewLine + "Stream Read Val:" + str + "\r\n";

}

}

相关推荐
鹿衔`12 分钟前
通过Flink 1.19 客户端实现Flink集群连接 Kafka 基础测试报告
c#·linq
安然无虞25 分钟前
JMeter性能测试工具·下
开发语言·测试工具·jmeter
4***R24027 分钟前
C++在音视频处理中的库
开发语言·c++·音视频
embrace991 小时前
【C语言学习】结构体详解
android·c语言·开发语言·数据结构·学习·算法·青少年编程
无心水1 小时前
【Python实战进阶】4、Python字典与集合深度解析
开发语言·人工智能·python·python字典·python集合·python实战进阶·python工业化实战进阶
代码不停1 小时前
Java单链表和哈希表题目练习
java·开发语言·散列表
Dxxyyyy1 小时前
零基础学JAVA--Day37(坦克大战1.0)
java·开发语言
u***u6852 小时前
PHP在电商中的WooCommerce
开发语言·php
冠希陈、2 小时前
PHP 过滤敏感词(含类库)
开发语言·php·内容敏感词
qq_401700412 小时前
Qt Positioning 模块访问设备地理位置信息
开发语言·qt