c# to Node.js - 刷新命名管道写入缓冲区不会结束流

c# to Node.js - Flushing named pipe write buffer does not end stream

我正在编写两个 Windows 应用程序(一个 C# 和一个 Electron),它们使用命名管道相互通信。 c# 客户端应发送消息,然后刷新以结束该消息。但是 NamedPipeClientStream 在刷新缓冲区时不会在节点端结束流:

// C# client
public class Client
{
    private NamedPipeClientStream _client;
    private StreamWriter _writer;

    public Client(string pipeName)
    {
        InitClient();
    }

    private void InitClient()
    {
        _client = new NamedPipeClientStream("myPipe");
        _writer = new StreamWriter(_client);
        _client.Connect();
    }

    public void SendMessage(string response)
    {
        _writer.Write(response);
        _writer.Flush();
    }
}

这会将消息发送到 Node.js 接收方:

// Node.js server
export class MessageHandler {
  private _pipePath;
  private _server: Server;
  private _stream: Socket;
  private _messageBuffer = "";

  constructor() {
    this._pipePath = "\\.\pipe\myPipe";
    this.initiateServer();
  }

  public initiateServer() {
    this._server = createServer({ allowHalfOpen: true }, (socket: Socket) => {
      this._stream = socket;

      this._stream.on("data", (buffer: Buffer) => {
        const message = buffer.toString();

        this._messageBuffer += message;
      });

      this._stream.on("end", () => {
        this.handleMessage();
      });
    });
  }

  private handleMessage() {
    ...
  }
}

我以为刷新流会触发消息的结束?

我错过了什么?我可以从 C# 客户端手动发送一个结束到我可以在节点端检测到的流吗?

谢谢!

您需要 Close 您的 _writer_client 使用后,才能释放它们。

您的 SendMessage 应如下所示:

_writer.Write(response);
_writer.Flush();
_writer.Close();
_client.Close();