Я пишу два приложения для 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 #, который я могу обнаружить на стороне узла?
Спасибо!