C# run Node.js

C# run nodejs

Inter-Process Communication,IPC
Process类 启动Node.js进程,通过标准输入输出与其进行通信。

// n.js// 监听来自标准输入的消息
process.stdin.on('data', function (data) {// 收到消息后,在控制台输出并回复消息console.log("Message from C#: " + data.toString());process.stdout.write("Hello from Node.js!");
});
     ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "node"; // Node.js可执行文件路径,如果已在系统路径中,则不需要提供完整路径startInfo.Arguments = "n.js"; // 执行的Node.js脚本文件路径startInfo.UseShellExecute = false;startInfo.RedirectStandardInput = true;startInfo.RedirectStandardOutput = true;Process nodeProcess = new Process();nodeProcess.StartInfo = startInfo;// 启动进程nodeProcess.Start();// 与Node.js进程进行通信using (var writer = nodeProcess.StandardInput){if (writer.BaseStream.CanWrite){// 向Node.js进程发送消息writer.WriteLine("Hello from C#!");}}// 读取Node.js进程的输出using (var reader = nodeProcess.StandardOutput){if (reader.BaseStream.CanRead){// 从Node.js进程读取响应string response = reader.ReadLine();Console.WriteLine("Response from Node.js: " + response);}}Console.Read();// 等待Node.js进程结束nodeProcess.WaitForExit();nodeProcess.Close();

在这里插入图片描述

Socket

server

const net = require('net');// 创建一个服务器实例
const server = net.createServer((socket) => {// 连接建立时触发console.log('Client connected.');// 监听客户端发送的数据socket.on('data', (data) => {console.log('Received from client: ' + data.toString());// 向客户端发送响应数据socket.write('Hello from Node.js!' + data.toString());});// 监听连接断开事件socket.on('end', () => {console.log('Client disconnected.');});
});// 监听指定端口
const port = 24520;
server.listen(port, () => {console.log('Node Server listening on port ' + port);
});
// 启动 Node.js 服务器的 Node.js 脚本文件路径
string nodeScriptPath = "n.js";// 启动 Node.js 进程
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "node"; // Node.js 可执行文件路径,如果已在系统路径中,则不需要提供完整路径
startInfo.Arguments = nodeScriptPath; // Node.js 脚本文件路径
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;Process nodeProcess = new Process();
nodeProcess.StartInfo = startInfo;// Node.js 服务器输出的事件处理函数
nodeProcess.OutputDataReceived += (sender, e) =>
{Console.WriteLine(e.Data); // 输出 Node.js 服务器的输出信息
};// 启动进程
nodeProcess.Start();
nodeProcess.BeginOutputReadLine(); // 开始异步读取 Node.js 服务器的输出// 等待 Node.js 进程结束
nodeProcess.WaitForExit();
nodeProcess.Close();

run

在这里插入图片描述

client

     // 连接到 Node.js 服务器的地址和端口string serverAddress = "127.0.0.1"; // 本地地址int serverPort = 24520; // Node.js 服务器端口// 创建 TcpClient 实例using (TcpClient client = new TcpClient(serverAddress, serverPort)){// 获取用于向服务器发送数据的网络流using (NetworkStream stream = client.GetStream()){// 发送数据到服务器string message = "hi from C#!";byte[] data = Encoding.ASCII.GetBytes(message);stream.Write(data, 0, data.Length);Console.WriteLine("Sent: " + message);// 读取服务器的响应byte[] buffer = new byte[1024];int bytesRead = stream.Read(buffer, 0, buffer.Length);string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);Console.WriteLine("Received: " + response);}}

run
在这里插入图片描述

nodejs run c#

Node.js 使用 child_process.exec() 函数执行 c# exe

     Console.WriteLine("hi c# ");
//runc.js
const { exec } = require('child_process');// 执行 hello.exe
exec('ConNode.exe', (error, stdout, stderr) => {if (error) {console.error(`执行错误: ${error.message}`);return;}if (stderr) {console.error(`执行错误: ${stderr}`);return;}console.log(`C# 输出: ${stdout}`);
});

run

node runc.js

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/329489.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++设计模式---面向对象原则

面向对象设计原则 原则的目的:高内聚,低耦合 1. 单一职责原则 类的职责单一,对外只提供一种功能,而引起类变化的原因都应该只有一个。 2. 开闭原则 对扩展开放,对修改关闭;增加功能是通过增加代码来实现的&…

探索 Rust 语言的精髓:深入 Rust 标准库

探索 Rust 语言的精髓:深入 Rust 标准库 Rust,这门现代编程语言以其内存安全、并发性和性能优势而闻名。它不仅在系统编程领域展现出强大的能力,也越来越多地被应用于WebAssembly、嵌入式系统、分布式服务等众多领域。Rust 的成功&#xff0…

计算机网络数据链路层知识点总结

3.1 数据链路层功能概述 (1)知识总览 (2)数据链路层的研究思想 (3)数据链路层基本概念 (4)数据链路层基本功能 3.1 封装成帧和透明传输 (1)数据链路层功能…

Redis常见数据类型(3)-String, Hash

目录 String 命令小结 内部编码 典型的使用场景 缓存功能 计数功能 共享会话 手机验证码 Hash 哈希 命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat String 上一篇中介绍了了String里的基本命令, 接下来总结一…

《Python编程从入门到实践》day37

# 昨日知识点回顾 制定规范、创建虚拟环境并激活,正在虚拟环境创建项目、数据库和应用程序 # 今日知识点学习 18.2.4 定义模型Entry # models.py from django.db import models# Create your models here. class Topic(models.Model):"""用户学习的…

Vue2基础及其进阶面试(一)

简单版项目初始化 新建一个vue2 官网文档:介绍 — Vue.js 先确保下载了vue的脚手架 npm install -g vue-cli npm install -g vue/cli --force vue -V 创建项目 vue create 自己起个名字 选择自己选择特性 选择: Babel:他可以将我们写…

微软开发者大会,Copilot Agents发布,掀起新一轮生产力革命!

把AI融入生产力工具的未来会是什么样?微软今天给出了蓝图。 今天凌晨,微软召开了Microsoft Build 2024 开发者大会,同前两天的Google I/O开发者大会一样,本次大会的核心词还是“AI”,其中最主要的内容是最新的Copilot…

拼多多暂时超越阿里成为电商第一

关注卢松松,会经常给你分享一些我的经验和观点。 拼多多的财报又炸裂了: 拼多多发布了第一季度财报,营收868亿,增长了131%,净利润279亿,增长了246%,营销服务收入424亿,也就是商家的…

BCD编码Java实现

最常用的BCD编码,就是使用"0"至"9"这十个数值的二进码来表示。这种编码方式,在称之为“8421码”(日常所说的BCD码大都是指8421BCD码形式)。除此以外,对应不同需求,各人亦开发了不同的编…

Linux多线程系列三: 生产者消费者模型,信号量使用,基于阻塞队列和环形队列的这两种生产者消费者代码的实现

Linux多线程系列三: 生产者消费者模型,信号量,基于阻塞队列和环形队列的这两种生产者消费者代码的实现 一.生产者消费者模型的理论1.现实生活中的生产者消费者模型2.多线程当中的生产者消费者模型3.理论 二.基于阻塞队列的生产者消费者模型的基础代码1.阻塞队列的介绍2.大致框架…

rust的版本问题,安装问题,下载问题

rust的版本、安装、下载问题 rust版本问题, 在使用rust的时候,应用rust的包,有时候包的使用和rust版本有关系。 error: failed to run custom build command for pear_codegen v0.1.2 Caused by: process didnt exit successfully: D:\rus…

【Mac】Dreamweaver 2021 for mac v21.3 Rid中文版安装教程

软件介绍 Dreamweaver是Adobe公司开发的一款专业网页设计与前端开发软件。它集成了所见即所得(WYSIWYG)编辑器和代码编辑器,可以帮助开发者快速创建和编辑网页。Dreamweaver提供了丰富的功能和工具,包括代码提示、语法高亮、代码…

es数据备份和迁移Elasticsearch

Elasticsearch数据备份与恢复 前提 # 注意: 1.在进行本地备份时使用--type需要备份索引和数据(mapping,data) 2.在将数据备份到另外一台ES节点时需要比本地备份多备份一种数据类型(analyzer,mapping,data,template) …

STM32看门狗

文章目录 WDG(Watchdog)看门狗独立看门狗独立看门狗框图超时时间计算 窗口看门狗超时时间 独立看门狗与窗口看门狗对比补充 WDG(Watchdog)看门狗 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干…

SpringCloud Alibaba的相关组件的简介及其使用

Spring Cloud Alibaba是阿里巴巴为开发者提供的一套微服务解决方案,它基于Spring Cloud项目,提供了一系列功能强大的组件,包括服务注册与发现、配置中心、熔断与限流、消息队列等。 本文将对Spring Cloud Alibaba的相关组件进行简介&#xff…

如何搭建一个vue项目(完整步骤)

搭建一个新的vue项目 一、安装node环境二、搭建vue项目环境1、全局安装vue-cli2、进入你的项目目录,创建一个基于 webpack 模板的新项目3、进入项目:cd vue-demo,安装依赖4、npm run dev,启动项目 三、vue项目目录讲解四、开始我们…

安装和使用图像处理软件GraphicsMagick @FreeBSD

GraphicsMagick是一个用于处理图像的读取、写入和操作的工具软件。它被誉为图像处理领域的“瑞士军刀”,短小精悍,支持超过88种图像格式,包括DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF等。 GraphicsMagick的主要特点包括:…

【openlayers系统学习】3.5colormap详解(颜色映射)

五、colormap详解(颜色映射) ​colormap​ 包是一个很好的实用程序库,用于创建颜色图。该库已作为项目的依赖项添加(1.7美化(设置style))。要导入它,请编辑 main.js​ 以包含以下行…

蓝桥楼赛第30期-Python-第三天赛题 从参数中提取信息题解

楼赛 第30期 Python 模块大比拼 提取用户输入信息 介绍 正则表达式(英文为 Regular Expression,常简写为regex、regexp 或 RE),也叫规则表达式、正规表达式,是计算机科学的一个概念。 所谓“正则”,可以…

Golang实现递归复制文件夹

代码 package zdpgo_fileimport ("errors""os""path/filepath""strings" )// CopyDir 复制文件夹 // param srcPath 源文件夹 // param desPath 目标文件夹 // return error 错误信息 func CopyDir(srcPath, desPath string) error {…