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