2011-11-23 70 views
1

所以我有一個在C + +的應用程序,它創建一個namedpipe接收通信。 namedpipe的名稱是「\\。\ pipe \ apppipe」我還有另一個appB也是用C++編寫的,它使用相同的命名管道連接到appA。簡單。現在在世界上移動:),appC在.NEt Framework 4.X上用C#構建,並且打算連接到appA創建的同一個命名管道(appB將被中斷)。但是,我發現NamedPipeClientStream對象似乎無法連接到appA的namedpipe。我以爲有名管道是一個有名管道,我不必關心它是如何連接的。Namedpipe:C++ vs .NET 4.0

這是APPC年代嘗試連接時失敗的真實...方式

NamedPipeClientStream pipeClient = new NamedPipeClientStream("\\\\.\\pipe\\apppipe"); 
    pipeClient.Connect(5000);//5 second timeout 

它是否有名字呢?我現在應該如何在C#端表示連接到同一個管道?

感謝

編輯: 的appA的管道創建代碼只是

LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\apppipe"); 

pipeHandle = CreateNamedPipe(
            lpszPipename, 
            PIPE_ACCESS_DUPLEX, 
            PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 
            PIPE_UNLIMITED_INSTANCES, 
            BUFSIZE, 
            BUFSIZE, 
            0, 
            NULL); 

    if(pipeHandle == INVALID_HANDLE_VALUE) 
    { 
     acutPrintf(L"\n Problem creating pipe"); 
     return; 
    } 
+0

這可能是權限/權利的問題......你需要解釋更多的細節,顯示出更多的代碼... – Yahia

+0

連接是立即失敗還是超時? 'GetLastError()'的價值是什麼?服務器期望的管道方向是什麼? –

+0

它在appC超時。這是appA的管道創建[上面編輯]。 – Glstunna

回答

2
NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "apppipe"); 
pipeClient.Connect(5000);//5 second timeout 

是你的朋友! 您可能還需要發送輸入/輸出選項(但可能不是),更多信息請檢查MSDN:How to: Use Named Pipes to Communicate Between Processes over a Network

+0

[單參數構造函數](http://msdn.microsoft.com/en-us/library/bb340152.aspx)上的文檔默認使用「」。「」的服務器名稱。 –

+0

已經嘗試過。不起作用... – Glstunna

+0

@AdamRosenfield,是的。這是.NET美的另一個很好的例子。只是刪除開發人員不需要的一切。在那種情況下:所有那些血腥的反斜槓! ;-) – esskar