gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:03:10 28 4
gpt4 key购买 nike

我正在研究 .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');
});

最佳答案

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

  • “命名管道”包在内部创建子管道。如果您使用相同的包创建服务器,则此包易于使用。但在这种情况下,管道服务器是通过 .net 应用程序创建的。因此,在 javascript 代码中,您最好使用 Node.js 的“net”模块连接到服务器。
  • 在 .net 应用程序中,您不应创建新的 StreamWriter。只需使用服务器实例的 write 方法。 NamedPipeServerStream 实现了 IDisposable,因此最好将其放在 using block 中。

  • .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');
    });

    关于.net - Node.js 和 .net 之间的命名管道通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231534/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com