2017-09-05 70 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(); 
相关问题