我在C#中遇到了Windows上命名管道的奇怪問題。Windows命名管道無法通過網絡工作?
客戶:
NamedPipeClientStream pipeStream = new NamedPipeClientStream("default-PC","mypipe");
pipeStream.Connect();
BinaryWriter sw = new BinaryWriter(pipeStream);
sw.Write((byte[]) data);
服務器:
NamedPipeServerStream pipeStream = new NamedPipeServerStream("mypipe");
byte[] dataAll = null;
pipeStream.WaitForConnection();
dataAll = new BinaryReader(pipeStream).ReadBytes(1024 * 1000 * 512);
-
如果我使用 「」作爲NamedPipeClientStream構造函數中的服務器名稱,一切正常,即服務器填充dataAll對象。
現在奇怪的是,如果我的另一隻手的NamedPipeClientStream將計算機(「默認-PC」)的網絡名稱,如顯示在上面的代碼中則沒有數據被讀取服務器上作爲服務器代碼中的ReadBytes返回一個空數組。
這可以理解我在兩臺不同的計算機上運行服務器和客戶端,但它們都在同一臺計算機上運行。唯一的區別是NamedPipeClientStream 中的「服務器名稱」參數是否爲「。」或實際的網絡名稱(甚至本地主機)。
任何想法?
@ user357320:通常情況下,這是不正確的。在我的64位Vista機器上,您的代碼適用於「。」和,數據大小至少爲50MB。在數據大小爲500MB的情況下,我的服務進程因OutOfMemoryException而崩潰,同時包含「。」和。 –
2011-05-16 12:15:32
我在Win7 x64機器上運行代碼。也許實現是不同的,但無論如何,當我嘗試發送超過64k的數據時,數據從未到達 - 至少使用默認設置。 – Karlth 2011-05-17 13:50:12