命名管道客户端(ACE,ACE_SPIPE_Connector)无法连接到csharp(NamedPipeServerStream)服务器

时间:2017-09-05 16:33:49

标签: c++ .net ace

我在将C ++客户端与ACE_SPIPE_Connector(ACE)连接到.NET服务器时遇到问题。虽然对地址\。\ pipe \ pipename的回显测试有效,但我怀疑使用ACE库的C ++代码存在问题。

这是.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;
}

我不知道这里有什么问题。

任何帮助?

谢谢,洛萨

1 个答案:

答案 0 :(得分:0)

与此同时,我发现了代码的问题。两点或问题:

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

2。)模式(消息与字节)。 ACE违反了消息而C#没有。

以下C#代码解决了这个问题:

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

server.WaitForConnection();