【问题标题】:Named pipe client (ACE, ACE_SPIPE_Connector) could not connect to csharp (NamedPipeServerStream) server命名管道客户端(ACE、ACE_SPIPE_Connector)无法连接到 csharp(NamedPipeServerStream)服务器
【发布时间】:2017-09-05 16:33:48
【问题描述】:

我在将带有 ACE_SPIPE_Connector (ACE) 的 C++ 客户端连接到 .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;
}

我不知道这里出了什么问题。

有什么帮助吗?

谢谢,洛萨

【问题讨论】:

    标签: c++ .net ace


    【解决方案1】:

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

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

    2.) 模式(消息与字节)。 ACE 默认为消息,而 C# 没有。

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多