Node.js 和 .net 之间的命名管道通信

2024-05-27

我正在研究 .net (v4.5.2) 和 Javascript node.js (v8.9.0) 应用程序之间的进程间通信。我想为此使用 Windows 命名管道(并且仅限命名管道)。对于 Javascript 应用程序,我使用的是命名管道包 (v0.0.1) 我能够在两个应用程序之间建立连接,这告诉我我在这里并没有完全偏离基地。每当我向 NamedPipeServerStream 写入字符串但未收到数据时,我希望看到 JavaScript 应用程序中触发数据事件。我无法接收任何数据。以下是 .net 和 JavaScript 应用程序的代码。有什么想法为什么数据事件没有被触发吗?

.Net代码

using System;
using System.IO;
using System.IO.Pipes;

namespace NamedPipes
{
    class Program
    {
        static void Main(string[] args)
        {
            var server = new NamedPipeServerStream("XYZNamedPipe");

            Console.WriteLine("Waiting for Connection");
            server.WaitForConnection();
            Console.WriteLine("Connection Established");
            StreamWriter writer = new StreamWriter(server);

            int cnt = 0;
            while (true)
            {
                string line = Console.ReadLine();
                writer.WriteLine(++cnt.ToString() + ": " + line);
            }
        }
    }
}

JavaScript 代码

var NamedPipes = require("named-pipes");
pipe = NamedPipes.connect('XYZNamedPipe')

pipe.on('connect', (str) => {
    console.log('connection established'); 
});

pipe.on('data', (str) => {
    console.log('data received');   
    console.log(str); 
});

pipe.on('end', (str) => {
    console.log('end');       
});

数据事件未触发的原因有两个:

  1. “命名管道”包在内部创建子管道。如果您使用相同的包创建服务器,则该包很容易使用。但在本例中,管道服务器是通过 .net 应用程序创建的。因此,在 javascript 代码中,您最好使用 Node.js 的“net”模块来连接到服务器。

  2. 在 .net 应用程序中,您不应创建新的 StreamWriter。只需使用服务器实例的 write 方法即可。 NamedPipeServerStream 实现了 IDisposable,因此最好将其放在 using 块中。

.Net代码

  static void Main(string[] args)
    {
        using (NamedPipeServerStream server = new NamedPipeServerStream("XYZNamedPipe"))
        {
            Console.WriteLine("Waiting for Connection");
            server.WaitForConnection();
            Console.WriteLine("Connection Established");

            int cnt = 0;
            while (true)
            {
                string line = Console.ReadLine();
                byte[] messageBytes = Encoding.UTF8.GetBytes((++cnt).ToString() + ": " + line);
                server.Write(messageBytes, 0, messageBytes.Length);
            }
        }
    }

JavaScript 代码

const net = require('net');

const PIPE_NAME = 'XYZNamedPipe';
const PIPE_PATH = '\\\\.\\pipe\\';

const client = net.createConnection(PIPE_PATH + PIPE_NAME, () => {
  console.log('connected to server!');
});

client.on('data', (data) => {
  console.log(data.toString());
});

client.on('end', () => {
  console.log('disconnected from server');
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 和 .net 之间的命名管道通信 的相关文章

随机推荐

  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • MySQL更改表,添加具有唯一随机值的列

    我有一个表 我添加了一个名为phone 该表还有一个 id 设置为自动增量的主键 如何将随机值插入到电话列中 该值不会重复 以下 UPDATE 语句确实插入了随机值 但并非所有值都是唯一的 另外 我没有被卖掉 我投了phone字段也正确 但
  • 添加带有错误的弹出窗口,警告闪亮

    有什么办法可以添加一个popup 可关闭的窗口 其中包含警告或其他消息Shiny 我用来构建 Web 应用程序的 R 包 我已经寻找了一段时间但没有任何结果 虽然我不认为有任何本地可用的东西shiny 你可以尝试添加jQueryUI到您的应
  • NHibernate:如何从会话缓存中获取实体实例?

    我在工作单元开始时开始会话 并在工作单元结束时关闭 工作单元分布在多种方法中 在一种方法中 我使用加载实体Get方法 所以它位于会话缓存中 实体实例对于方法来说是本地的 因此 当方法范围结束时 实体实例将无法访问 但实体仍在会话缓存中 现在
  • Angular 2 错误:无法解析“RouteParams”的所有参数

    尝试使用 RouteParams 获取查询字符串参数 但我只是收到错误 无法解析 RouteParams 的所有参数 确保所有 参数用 Inject 修饰或具有有效类型 注释并且 RouteParams 用 Injectable 修饰 an
  • 读取 Nashorn JO4 和 NativeArray

    Java调用代码 import jdk nashorn api scripting myCustomHashMap dataStore new myCustomHashMap ScriptEngineManager sem new Scri
  • IntelliJ 建议错误的 @NotNull 注释

    IntelliJ 建议导入com sun istack internal NotNull以下程序中的 NotNull 注释 这是错误的 public class Test implements Comparable
  • 获取 ArrayIndexOutOfBoundsException 异常 [重复]

    这个问题在这里已经有答案了 这几天得到ArrayIndexOutOfBoundsException https docs oracle com javase 7 docs api java lang ArrayIndexOutOfBound
  • Captive Wifi 弹出窗口:单击链接打开 Safari

    我们的 iOS 设备 ipad iphone 等 网络出现问题 连接到 SSID 后 iphone ipad 立即打开强制网络助手 CNA 它就像一个缩小版的浏览器 没有导航按钮等 显示我们的欢迎页面 准备好让用户在网络中验证他的 MAC
  • 如何使用JQuery动态获取Body元素高度

    当我调整浏览器窗口大小时 我需要获取主体元素的高度和宽度 请帮我用JQuery解决这个问题 在窗口对象上使用调整大小事件 window resize function var width document width or window w
  • F# 匹配 ->

    我想做类似的东西 Nemerle 语法 def something match STT 1 with st Summ 2 with st AVG gt st summbycol counter STT 在 F 上 那么 F 是真的吗 没有对
  • Knockout JS - 如何正确绑定 observableArray

    请看一下这个例子 http jsfiddle net LdeWK 2 http jsfiddle net LdeWK 2 我想知道如何绑定可观察数组的值 我知道上面例子中的问题 就是这一行 p Editing Fruit p
  • 为什么 Contextmanager 会抛出运行时错误“生成器在 throw() 之后没有停止”?

    在我的 utility py 中 contextmanager def rate limit protection max tries 3 wait 300 tries 0 while max tries gt tries try yiel
  • 有没有带有保存和语法突出显示功能的 HTML、CSS 在线文本编辑器?

    我想让 css 文件可以从任何地方 家庭 办公室等 访问并准备好编辑 并保存 我将进行手工编码 只想语法突出显示并保存在网络设施上 我尝试了谷歌文档 这很好 因为我可以在线保存 而且它也有修订历史记录功能 这很有用 但它没有语法突出显示 也
  • 卸载 SSL 时保护表单身份验证 Cookie

    我正在尝试使用 ASP NET MVC 2 0 和表单身份验证来保护我当前正在开发的网站 为了保护表单身份验证cookie 我想将requiresSSL 属性设置为true 以便浏览器仅在连接处于SSL 下时才发送cookie 并且显然确保
  • github Diff 截断错误

    在 github 中发出拉取请求并审查更改时 我们收到了 Diff Truncated 错误 如下所示 任何人都可以帮助解决这个问题 拉取请求可能会触发以下提到的限制之一GitHub 支持 https stackoverflow com a
  • 图像映射区域周围不需要的边框

    我正在使用带有圆形区域的图像贴图 问题是我在 IE7 中的区域周围出现了不需要的边框 此边框不会出现在 FF 和 Chrome 中 也不会出现在 IE8 IE9 中 我尝试向图像添加 border 0 锚点的 css 属性 即 a bord
  • 在 numpy/scipy 中查找 matlab 函数

    是否有一个等价的函数find A gt 9 1 来自 numpy scipy 的 matlab 我知道有nonzeronumpy 中的函数 但我需要的是第一个索引 以便我可以在另一个提取的列中使用第一个索引 Ex A 1 2 3 9 6 4
  • 在 R 中使用 randomforest() 进行分类?

    我最初有一个由 N 行 12 列组成的数据框 最后一列是我的班级 0 或 1 我必须将整个数据框转换为数字 training lt sapply training temp as numeric 但后来我认为我需要将类列作为因子列来使用 r
  • Node.js 和 .net 之间的命名管道通信

    我正在研究 net v4 5 2 和 Javascript node js v8 9 0 应用程序之间的进程间通信 我想为此使用 Windows 命名管道 并且仅限命名管道 对于 Javascript 应用程序 我使用的是命名管道包 v0