c# 管道通訊-具名管道(二)

來源:互聯網
上載者:User

具名管道的串連總結:

       具名管道的串連有兩次阻塞的地方,一是在WaitForConnection()時[用戶端進行串連同理]會阻塞,二是在ReadString()[讀取管道資訊]時。

       在伺服器端第一次建立具名管道後等待串連,當用戶端串連成功後伺服器端的具名管道就用作通訊用途。如果需要再次等待串連,伺服器端就需要再次開啟具名管道(建立一個具名管道的執行個體)並等待串連。

        對於用戶端每次開啟具名管道後建立與伺服器間的串連,然後就可以利用具名管道進行通訊,如果需要建立第二個串連則需要再次開啟管道和再次建立串連。

       建立具名管道時需要指定一個主機名稱和管道名,在同一主機上管道名稱是唯一的,一個具名管道一旦被建立就不允許相同名稱的管道再被建立。

        請注意關閉管道和關閉串連是不同的意思,在同一個管道上可以依次反覆建立串連,而且可以減小系統的負荷。而且如果指定了管道最大數量限制那麼在開啟的管道達到最大限制後如果不關閉舊管道就無法開啟新管道。 對於客戶方則無法關閉串連,而只能直接調用Close()關閉管道。如果用戶端調用了close()關閉了管道,那麼再次串連伺服器端的原管道就不可以了,服務端的管道也需要重新進行初始化並且等待串連。

關於雙向通訊:

      上篇文章中提到了管道可以進行雙向通訊,雙向通訊實際上就是服務端類比用戶端回傳訊息,用戶端進行接收的過程,主要是調用了pipeServer.RunAsClient(StartListening),StartListening是一個回調方法,裡面可以寫回傳的訊息。而用戶端就進行Read就可以了,具體代碼為:

用戶端主要代碼:

NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", _pipeName, PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation);pipeClient.Connect();while (true){//Writestring sRequest = "request";StreamString ss = new StreamString(pipeClient);ss.WriteString(sRequest);//Readstring sResult = ss.ReadString();if (sResult != ""){//}}

服務端主要代碼:

NamedPipeServerStream pipeServer = new NamedPipeServerStream(_pipeName, PipeDirection.InOut, 1);pipeServer.WaitForConnection();try{_ss = new StreamString(pipeServer);string sResult = _ss.ReadString();if ( sResult != ""){pipeServer.RunAsClient(StartListening);}}catch (IOException ex){}private void StartListening(){//Return result messagestring sResult = "request";_ss.WriteString(sResult);}

       因本人的程式包含一些複雜的邏輯處理,只是貼出來部分主幹代碼,代嗎不能直接運行,希望博友理解含義後自行實踐。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.