Pipe Problem

04/02/2009 - 08:45 von Martin Lentzsch | Report spam
Hallo zusammen,

ich habe ein Pipe Problem. Zunàchst, was will machen?
Es gibt einen Server und einen Client. Der Server wartet auf Connect
und Nachricht vom Client und tut dann irgendwas. In meinem Beispiel
soll einfach nur Hallo angezeigt werden.

Die Funktionen werden durch eine Anwendung aufgerufen.
OpenPipe() wird beim Start der Anwendung aufgerufen und ClosePipe()
beim Ende. Das Connect und write in die Pipe mach ich nur um den
Thread freizugeben.

Beim _sw.WriteLine() gehts nicht weiter. Der Connect vom PipeClient
funktioniert, nur das Write nicht. Aber auch der Server merkt nihcts
davon, weil der in WaitForConnection stehen bleibt.
Ist bestimmt ganz simpel.

Vielen Dank schonmal

Liebe Grüße
Martin Lentzsch

public NamedPipeServerStream Pipe = null;
public System.Threading.Thread ServerThread = null;

public static void OpenPipe()
{
Process _p = Process.GetCurrentProcess();
Pipe = new NamedPipeServerStream("PIPE_" + _p.ProcessName,
PipeDirection.In, 1);

ServerPipeThread = new System.Threading.Thread(new
System.Threading.ThreadStart(ServerThread));
ServerPipeThread.Start();
}

public static void ClosePipe()
{
ServerPipeThread.Suspend(); // Ich weiß dass es
deprecated ist, aber was nutz man stattdessen?

Process _p = Process.GetCurrentProcess();
NamedPipeClientStream _nps = new NamedPipeClientStream
(".", "PIPE_" + _p.ProcessName, PipeDirection.Out);

_nps.Connect();
StreamWriter _sw = new StreamWriter(_nps);
_sw.AutoFlush = true;
_sw.WriteLine("Hallo Test"); // Hier wird nicht
geschrieben, bzw. gewartet bis sonstewann
_nps.Close();

ServerPipeThread.Join();
Pipe.Close();

}

private static void ServerThread()
{

while (ServerPipeThread.IsAlive)
{

Pipe.WaitForConnection(); // Hier schlàft der Thread,
bzw. wartet und wacht nicht mehr auf
StreamReader _sr = new StreamReader(Pipe);
string _s = _sr.ReadLine();
if (!_s.Equals(""))
MessageBox.Show(_s);
}
}
 

Lesen sie die antworten

#1 Frank Dzaebel
06/02/2009 - 16:48 | Warnen spam
Hallo Martin,

ich habe ein Pipe Problem. Zunàchst, was will machen?
Es gibt einen Server und einen Client. Der Server wartet auf Connect
und Nachricht vom Client und tut dann irgendwas. In meinem Beispiel
soll einfach nur Hallo angezeigt werden.



Schau Dir ggf. einfach mal folgendes (downloadbares)
Projekt an, da ist sowas implementiert:

[Named Pipes unter .NET]
http://dzaebel.net/NamedPipes.htm


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen