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 byte999;

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";

}

}

相关推荐
我是坏垠1 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant1 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
Bobolink_2 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
你怎么知道我是队长2 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
xingke2 小时前
C 语言多文件编程:(一)头文件、extern、编译链接
c语言·开发语言·多文件
戮漠summer3 小时前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
jinyishu_3 小时前
C++ string使用方法
开发语言·c++
EW Frontier3 小时前
三级跳突破864维动作空间——QMIX-Hierarchical多无人机协同通信方法全解析【附python代码】
开发语言·python·无人机·强化学习·通信资源分配
名字还没想好☜3 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
乐观勇敢坚强的老彭3 小时前
C++浮点数使用注意事项
开发语言·c++