C# 利用 命名管道 進行 進程間通訊


 

最近在做一個數據庫同步軟件.!!

程序 服務端為 一個winform + windows Service 二大模塊.!

由於程序功能的需求. 需要winform 與windows Service進程通訊. 因此使用了 命名管道 來實現功能需求.!

 

以此記下筆記 , 並付上一Demo

有關 NamedPipeServerStream 類 官方MSDN文檔說明

NamedPipeServerStream pipeServer = new  NamedPipeServerStream("testpipe", PipeDirection.InOut,  PipeTransmissionMode.Message, PipeOptions.Asynchronous); 
void Form1_Load(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(delegate
{
pipeServer.BeginWaitForConnection((o) =>;
{
NamedPipeServerStream server = (NamedPipeServerStream)o.AsyncState;
server.EndWaitForConnection(o);
StreamReader sr = new StreamReader(server);
StreamWriter sw = new StreamWriter(server);
string result = null;
string clientName = server.GetImpersonationUserName();
while (true)
{
result = sr.ReadLine();
if (result == null || result == "bye")
break;
this.Invoke((MethodInvoker)delegate { lsbMsg.Items.Add(clientName+" : "+result); });
}
}, pipeServer);
});
}




有關 NamedPipeClientStream 類 官方MSDN文檔說明

View Code
 1 NamedPipeClientStream pipeClient = new NamedPipeClientStream("192.168.1.100", "testpipe",  PipeDirection.InOut, PipeOptions.Asynchronous,  TokenImpersonationLevel.None); StreamWriter sw = null; 
2 void Form2_Load(object sender, EventArgs e)
3 {
4 pipeClient.Connect();
5 sw = new StreamWriter(pipeClient);
6 sw.AutoFlush = true;
7 }
8 private void button1_Click_1(object sender, EventArgs e)
9 {
10 sw.WriteLine(textBox1.Text);
11 }



 

經發現,命名管道, 其實是基於TCP/IP 來連接. 且端口為 445

 

當然, 我這里只是 傳輸一個字符串做為信息而已.! 其實仍然 可以傳輸自己所定義的 對象 等.(記得序列化喲..)

源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM