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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最新 Jenkins + Docker 实战教程(三) - 在Jenkins服务器上运行java项目

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

Kafka SASL_SSL集群认证

背景 公司需要对kafka环境进行安全验证,目前考虑到的方案有Kerberos和SSL和SASL_SSL,最终考虑到安全和功能的丰富度,我们最终选择了SASL_SSL方案。处于知识积累的角度,记录一下kafka SASL_SSL安装部署的步骤。 机器规划 目前测试环境公搭建了三台kafka主机服务,现在将详…

【js刷题:数据结构链表之环形链表】

环形链表 一、题目二、实现思路1.判断是否有环2.如何找到环状链表的入口节点 三、解题代码 一、题目 二、实现思路 主要有两点,首先我们要判断这个链表是否有环,其次我们要找到这个环的入口节点。 1.判断是否有环 定义一个快指针fast和慢指针slow 快指…

基于.NetCore和ABP.VNext的项目实战二:Swagger

Mag.Blog.Swagger层添加Volo.Abp.AspNetCore和Swashbuckle.AspNetCore包,引用实体层.Domain 添加模块类MagBlogSwaggerModule.cs,依赖MagBlogDomainModule模块,并且重写ConfigureServices和OnApplicationInitialization方法 namespace Mag.Blog.Swagger {[DependsOn(typeof…

【机器学习】在电子商务(淘*拼*京*—>抖)的应用分析

机器学习与大模型:电子商务的新引擎 一、电子商务的变革与挑战二、机器学习与大模型的崛起三、机器学习与大模型在电子商务中的应用实践个性化推荐精准营销智能客服库存管理与商品定价 四、总结与展望 随着互联网的飞速发展,电子商务已经成为我们生活中不…

c++ 实现 梯度下降线性回归模型

理论与python实现部分 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation c代码 没能力实现反向传播求梯度&#xff0c;只能自己手动算导数了 #include <bits/stdc.h> #include <time.h> using namespace std;//y_hat X * W b // linreg 函数&#xff1a…

Unity射击游戏开发教程:(24)创造不同的敌人

在这篇文章中,我们将讨论添加一个可以承受多次攻击的新敌人和一些动画来使事情变得栩栩如生。敌人没有任何移动或射击行为。这将有助于增强未来敌人的力量。 我们将声明一个 int 来存储敌人可以承受的攻击数量,并将其设置为 3。

深度学习之基于Matlab卷积神经网络(CNN)手写数字识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是计算机视觉领域的一个重要问题&#xff0c;也是深度学习应用的一个典型场景。卷…

基于消息中间件的异步通信机制在系统解耦中的优化与实现

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

Docker Compose快速入门

本教程旨在通过指导您开发基本Python web应用程序来介绍Docker Compose的基本概念。 使用Flask框架&#xff0c;该应用程序在Redis中提供了一个命中计数器&#xff0c;提供了如何在web开发场景中应用Docker Compose的实际示例。 即使您不熟悉Python&#xff0c;这里演示的概念也…

Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(一) LLaMA-Factory简介

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

以色列人Andi Gutmans开发的php zend

虽然目前php语言不行了【相关的文章前几年已经有人发过】&#xff0c;但这不是重点&#xff0c;重点是zend引擎的东西具有极大的技术价值&#xff0c;负责zend引擎实现的大佬都现在差不多都是40&#xff0c;50岁左右了&#xff0c;从1997&#xff0c;1998&#xff0c;2000到202…

Java基础之进制转换和位运算专题

什么是进制&#xff1f; 是数学中的一个概念&#xff0c;就是数据“逢几进位”。 例如&#xff1a;生活中用的计数方法 ---- 十进制。十进制就是数字逢十就要进一位。 例如&#xff1a;一个星期有7天&#xff0c;就是逢七进一&#xff1b;一个月有30天就是逢30进一&#xff1b;…

基于单片机和蓝牙控制的智能小车设计

摘要 &#xff1a; 本文设计了一种以智能手机为平台控制小车的控制系统&#xff0c;该系统以蓝牙为通信模块&#xff0c;手机通过蓝牙发送信号给小 车上的蓝牙模块&#xff0c;从而驱动电机实现小车各种运动&#xff0c;提供了一种无线遥控小车的新思路。设计了该系统的硬件与软…

思维导图-VPN

浏览器集成了受信任的机构的证书

python+selenium - UI自动框架之封装查找元素

单一的元素定位方法不能满足所有元素的定位&#xff0c;可以根据每个元素的特点来找到合适的方法&#xff0c;可以参考下图的方法&#xff1a; elementFind.py from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_con…

汇舟问卷:海外问卷项目适合工作室做吗?

这个项目适合工作室操作&#xff0c;国外问卷调查主要是利用填写问卷来赚取奖励。只要完成得越多&#xff0c;挣得也就越多。 这个项目的本质就是在线上进行简单的工作&#xff0c;只不过结算方式是以美元计算。 即使一份问卷只值1美元&#xff0c;但这也意味着收入达到了7元…

鸿蒙ArkUI-X跨平台技术:【SDK结构介绍】

ArkUI-X SDK目录结构介绍 简介 本文档配套ArkUI-X&#xff0c;将OpenHarmony ArkUI开发框架扩展到不同的OS平台&#xff0c;比如Android和iOS平台&#xff0c;让开发者基于ArkUI&#xff0c;可复用大部分的应用代码&#xff08;UI以及主要应用逻辑&#xff09;并可以部署到相…

ngnix 入门 二,docker启动nginx, 安装ssl 证书,使用配置文件,映射后端服务 ,提供给前端项目访问

搭建生产环境真不是人做的事&#xff0c;特别是对于一知半解的人。仅以此文献给各位技术人 说一下背景&#xff1a;项目前后端分离&#xff0c;前端 vue3 、小程序端 &#xff0c;后端 go 提供服务。 微信小程序需要使用 https 请求。 这就必须让我们想到nginx 了 想要达到的…

代码随想录算法训练营第二天| 977.有序数组的平方 、209.长度最小的子数组、 59.螺旋矩阵II

977. 有序数组的平方 题目链接&#xff1a;977. 有序数组的平方 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 刚开始看到题目第一反应就是平方之后进行排序&#xff0c;数据量在 1 0 4 10^4 104&#xff0c;可以使用O(nlogn)的排序。但是更好的方式是使用双指针&a…