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



我正在编写两个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();

最新更新