Just for fun——C#应用和Nodejs通讯

本文介绍了一个使用Node.js与C#实现跨进程通信的实际案例,通过命名管道技术实现了不同编程语言间的进程间通信(IPC)。文章提供了完整的C#与Node.js代码示例,并展示了如何设置简单的用户界面来接收和显示从Node.js发送的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程通信

常见的进程通讯的方法有:

  • 管道(Pipe)
  • 命名管道
  • 信号
  • 消息队列
  • 其他

管道是比较简单基础的技术了,所以看看它。

Node IPC支持

Node官方文档中Net模块写着:

IPC Support

The net module supports IPC with named pipes on Windows,
and UNIX domain sockets on other operating systems.

Class: net.Server

Added in: v0.1.90 This class is used to create a TCP or IPC server.

可以看到,Node在Windows上可以用命名管道进行进程通信。

测试

C#

public partial class frmMain : Form
{
    public frmMain()
    {
        InitializeComponent();
    }

    private const string PIPE_NAME = "salamander_pipe";

    private void btnStartListen_Click(object sender, EventArgs e)
    {
        Task.Factory.StartNew(StartListen);
    }

    private void StartListen()
    {
        for (;;)
        {
            using (NamedPipeServerStream pipeServer =
                new NamedPipeServerStream(PIPE_NAME, PipeDirection.InOut, 1))
            {
                try
                {
                    pipeServer.WaitForConnection();
                    pipeServer.ReadMode = PipeTransmissionMode.Byte;
                    using (StreamReader sr = new StreamReader(pipeServer))
                    {
                        string message = sr.ReadToEnd();
                        txtMessage.Invoke(new EventHandler(delegate
                        {
                            txtMessage.AppendText(message + "\n");
                        }));
                    }
                }
                catch (IOException ex)
                {
                    MessageBox.Show("监听管道失败:" + ex.Message);
                }
            }
        }
    }
}

设计界面很简单:

clipboard.png

Nodejs

const net = require('net');

const PIPE_NAME = "salamander_pipe";
const PIPE_PATH = "\\\\.\\pipe\\" + PIPE_NAME;

let l = console.log;

const client = net.createConnection(PIPE_PATH, () => {
    //'connect' listener
    l('connected to server!');
    client.write('world!\r\n'); 
    client.end();
});

client.on('end', () => {
    l('disconnected from server');
});

代码很简单,创建一个连接,然后发送数据。

测试效果

clipboard.png

总结

多看文档哦^_^
C#代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值