標籤:
原文:C#具名管道通訊
C#具名管道通訊
最近項目中要用c#處理序間通訊,以前常見的方法包括RMI、發訊息等。但在Windows下面發訊息需要有視窗,我們的程式是一個後台運行程式,發訊息不試用。RMI又用的太多了,準備用管道通訊來做訊息通訊。
管道通訊以前在大學學過,包括匿名管道和具名管道。匿名管道只能用在父子進程之間;具名管道可以用在兩個進程甚至跨伺服器通訊。這裡給出具名管道的樣本。
伺服器端代碼
private static void WaitData() { using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut, 1)) { try { pipeServer.WaitForConnection(); pipeServer.ReadMode = PipeTransmissionMode.Byte; using (StreamReader sr = new StreamReader(pipeServer)) { string con = sr.ReadToEnd(); Console.WriteLine(con); } } catch (IOException e) { throw e; } } }
用戶端代碼
private static void SendData() { try { using (NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", "testpipe", PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.None)) { pipeClient.Connect(); using (StreamWriter sw = new StreamWriter(pipeClient)) { sw.WriteLine("hahha"); sw.Flush(); } } } catch (Exception ex) { throw ex; } }
參考:
如何:使用具名管道進行網路處理序間通訊
C#中使用具名管道進行進程通訊的執行個體
處理序間通訊 - 具名管道實現
C#具名管道通訊