Ich habe zwei .NET-Anwendungen, die über eine Named Pipe miteinander kommunizieren. Alles ist großartig beim ersten Mal durch, aber nachdem die erste Nachricht gesendet wird und der Server wieder zu hören ist, wirft die WaitForConnection()
Methode eine System.IO.Exception
mit Nachricht Pipe ist kaputt.
Warum bekomme ich diese Ausnahme hier? Dies ist das erste Mal, dass ich mit Röhren arbeite, aber ein ähnliches Muster hat in der Vergangenheit mit Sockeln funktioniert.System.IO.Exception: Pipe ist gebrochen
Code ahoi!
Server:
using System.IO.Pipes;
static void main()
{
var pipe = new NamedPipeServerStream("pipename", PipeDirection.In);
while (true)
{
pipe.Listen();
string str = new StreamReader(pipe).ReadToEnd();
Console.Write("{0}", str);
}
}
Auftraggeber:
public void sendDownPipe(string str)
{
using (var pipe = new NamedPipeClientStream(".", "pipename", PipeDirection.Out))
{
using (var stream = new StreamWriter(pipe))
{
stream.Write(str);
}
}
}
Der erste Aufruf von sendDownPipe den Server erhält die Nachricht, die ich ganz gut zum Drucken senden, aber wenn es wieder zu hören Schleife zurück, es kackt.
Ich denke, der Grund, warum Sie dieses Problem haben, weil der Linie ist „new Stream (Rohr) ". Der Bereich des erstellten Stream-Readers ist die erste while-Schleife und wird dann neu erstellt. Das Verhalten von Stream-Lesern ist jedoch so, dass sie den Stream, den sie umhüllen, schließen. Wenn der Stream nicht mehr vorhanden ist, wird der Pipe-Stream geschlossen. Sie können versuchen, seine Deklaration aus der While-Schleife zu entfernen und zu überprüfen (S.S: Ich habe nicht persönlich versucht, wenn der Code funktioniert, wenn Sie das tun - wollte nur einen Kommentar hinzufügen und nicht antworten) – user3141326