Forum: PC-Programmierung Windows Pipe Protokoll erstellt - Broken Pipe Error


von Martin (Gast)


Lesenswert?

Hallo,
ich möchte bzw. habe bereits ein Server <-> Client Protokoll erstellt 
mit dessen Hilfe sich 5 Clients mit dem Server jeweils über getrennte 
Named Pipes unterhalten können.

Der Ablauf ist wie folgt:

Der Server ist aktiv und wartet auf Anfragen eines Clients.

Der Server hat 2 Funktionen:
1. Zuweisung der jeweils freien Pipe an den Clients nach seiner 
CONNECT-Anfrage
2. Kommunikation mit dem jeweiligen Client über den die im zugewiesene 
Pipe.

D.h. stellt der Client eine Kontaktanfrage an den Server und erhält vom 
Server den PipeName über den zukünftig die Client-Server Kommunikation 
abläuft.
Nun verbindet sich der Client mit der im zugesandten NamedPipe und 
tauscht hierüber Daten mit dem Server aus.
Nachdem der Client geschlossen wird, hat der Server diese Pipe frei für 
die Verbindung mit dem nächsten Client usw.

Soweit ist dieses Protokoll in 2 c# Applikationen umgesetzt.

Auf einem Rechner funktioniert es zu 98% fehlerfrei, doch auf einem 
anderen PC leider nur zu 10%.
Ich erhalte vom Server zwar noch den korrekten PipeNamen und der Client 
kann sich auch mit ihm verbinden, doch statt einer Antwort zum Server zu 
erhalten, bekomme ich nur die "Windows Meldung: Broken Pipe".
Bei einer erneuten Serveranfrage erhalte ich wieder nur den Namen dieser 
defekten Pipe mit der ich mich nicht verbinden kann und somit 
funktioniert  meine Applikation dann nicht mehr.

Kann sich wer von euch vorstellen, wo hier der Fehler liegt und warum es 
auf einem Windows Rechner funktioniert und auf dem anderen nicht?

Über ein paar Tipps wäre ich sehr dankbar!!

von Martin (Gast)


Lesenswert?

Weiß wer, warum ein Broken Pipe Fehler entsteht?
Evtl. kann ich ja die Ursache dafür verhindern?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Martin schrieb:
> D.h. stellt der Client eine Kontaktanfrage an den Server und erhält vom
> Server den PipeName über den zukünftig die Client-Server Kommunikation
> abläuft.

Das ist bei named pipes nicht erforderlich. Ein Pipe-Server kann mehrere 
Instanzen einer Pipe mit einem Namen gleichzeitig bedienen, ganz so 
wie auch bei der Socket-Kommunikation ein Server auf einem Port mehrere 
Clients gleichzeitig bedienen kann.

von Martin (Gast)


Lesenswert?

OK, habe ich verstanden. Dennoch möchte ich nachvollziehen, warum ich 
einen Broken Pipe Error erhalte!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Weil irgendwas schiefgeht.

Ohne Deinen Quelltext zu sehen --sowohl vom Client als auch vom Server-- 
lässt sich dazu mehr nicht sagen.

von Jim M. (turboj)


Lesenswert?

Martin schrieb:
> über getrennte Named Pipes unterhalten können

Named Pipes performen unter Windows so unterirdisch, dass man eigentlich 
immer TCP/IP benutzen will - zumal sich der Mehraufwand IMO in Grenzen 
hält.

Man kann die Kommunikation auf den Host beschränken, wenn man als Listen 
address die "127.0.0.1" oder "::1" (IPv6) wählt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.