2017-09-05 118 views
0

將C++客戶端與ACE_SPIPE_Connector(ACE)連接到.NET服務器時出現問題。雖然對地址\。\ pipe \ pipename有回聲的測試可行,但我懷疑使用ACE庫的C++代碼存在問題。命名管道客戶端(ACE,ACE_SPIPE_Connector)無法連接到csharp(NamedPipeServerStream)服務器

這裏是.NET服務器代碼:

var server = new NamedPipeServerStream("acepipe"); 

server.WaitForConnection(); 
StreamReader reader = new StreamReader(server); 

var line = reader.ReadLine(); 
Console.WriteLine(line); 

這裏是C++客戶端代碼:

#if defined (ACE_WIN32) 
#define MAKE_PIPE_NAME(X) ACE_TEXT ("\\\\.\\pipe\\") ACE_TEXT (X) 
#else 
#define MAKE_PIPE_NAME(X) ACE_TEXT (X) 
#endif 

const ACE_TCHAR *rendezvous = MAKE_PIPE_NAME("acepipe"); 

ACE_SPIPE_Stream cli_stream; 
ACE_SPIPE_Connector con; 
int i; 

if (con.connect(cli_stream, 
    ACE_SPIPE_Addr(rendezvous)) == -1) 
{ 
    printf("Named pipe connect failed.\n%s\n", rendezvous); 
    return 0; 
} 

我不知道這裏有什麼問題。

任何幫助?

謝謝,Lothar

回答

0

同時我發現了代碼的問題。兩點或問題:

1.)命名管道自己的名稱是不同的。\ pipe \ acepipe(C++)vs。\ acepipe(C#)。

2.)模式(消息vs字節)。 ACE默認爲消息,而C#沒有。

下面的C#代碼解決該問題:

var server = new NamedPipeServerStream("acepipe", PipeDirection.InOut, 4, PipeTransmissionMode.Message); 

server.WaitForConnection(); 
相關問題