C#使用命名管道与其他进程间通讯(二)

在上一篇《C#使用命名管道与其他进程间通讯(一)》中展示了如何在两个C#开发的进程直接进行数据传递,本文将展示如何使用Go开发的进程和C#开发的进程间通讯。

一、建立Server端

参照《C#使用命名管道与其他进程间通讯(一)》中使用NamedPipeServerStream构造Server端。本文将直接使用上一节中的Server端,不再赘述。

二、建立Client端

上一节中使用C#构建了一个Client,本文将使用Go构建一个Client从Server读取数据。

1、从Github上下载开源代码

Go使用windows的pipe通道在github上有个开源的库,地址是:https://github.com/natefinch/npipe.git。使用Git Bash下载到本地。

2、创建Client读取数据

在github上的开源库中已经介绍了怎么使用,所以本文参照其使用,本地创建代码如下:

package main

import (
   "bufio"
   "fmt"
   "github.com/npipe"
   "sync"
   "time"
)

func main() {
   for {
      conn, err := npipe.Dial(`\\.\pipe\testpipe`)
      if err != nil {
      }
      for {
         msg, err := bufio.NewReader(conn).ReadString('\n')
         if err != nil {
            break
         }
         time.Sleep(1 * time.Second)
         fmt.Println(msg)
      }
      time.Sleep(10 * time.Second)
   }

}

这样就可以与上一节中用C#建立的Server进行数据交互了。

三、注意事项

两个进程直接数据传输需要考虑以下几点:

1、数据传输格式,有两种格式,一种是string字符串,也是本文中代码示例中使用的,一种是byte[],byte[]数组读取的时候也可以一个字节一个字节的读取。

2、管道管理。两个进程间通讯,总会有异常,当有异常时,不管Server还是Client都需要重启的功能,本文的示例中仅仅使用了无限循环来管理,实际项目也可以这样,但是得考虑更多因素,比如重启间隔,连接资源释放等等。尤其是Go通常是使用协程来建立管道,使用不当将会创建额外的协程造成内存泄漏。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值