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

相关推荐

  1. C#进程通信共享内存方式

    2023-12-09 01:34:03       36 阅读
  2. linux c进程通信共享内存和信号量

    2023-12-09 01:34:03       17 阅读
  3. python线程和进程内存共享方式

    2023-12-09 01:34:03       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 01:34:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 01:34:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 01:34:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 01:34:03       20 阅读

热门阅读

  1. qt day2

    qt day2

    2023-12-09 01:34:03      36 阅读
  2. 点击登录按钮二次才跳转到首页

    2023-12-09 01:34:03       41 阅读
  3. 函数的参数

    2023-12-09 01:34:03       37 阅读
  4. AcGeLinearEnt2d::getPerpLine函数

    2023-12-09 01:34:03       40 阅读
  5. docker数据卷

    2023-12-09 01:34:03       35 阅读
  6. DVPP媒体数据处理视频编码问题案例

    2023-12-09 01:34:03       36 阅读
  7. React 笔记 父子组件传值

    2023-12-09 01:34:03       40 阅读
  8. 圣诞树网页效果代码详解

    2023-12-09 01:34:03       37 阅读
  9. scss:修改element组件样式(el-select)

    2023-12-09 01:34:03       37 阅读