【发布时间】:2016-02-16 10:59:26
【问题描述】:
我编写了 2 对命名管道客户端/服务器程序: C# (.NET 4) 中的第一对 C++ 中的第二对(非托管)
所有 4 个测试程序都使用相同的管道名称 \\.\pipe\mypipe
这对 C# 对彼此正常工作 - 我从客户端发送一条消息,然后由服务器接收。 这对 C++ 对彼此也可以正常工作。
但是...当我尝试使用 C++ 服务器运行 C# 客户端或使用 C# 服务器运行 C++ 客户端时,它不起作用。客户端无法连接到服务器。
是否有什么东西阻止 C++ 客户端与 .NET 服务器一起工作? 它应该工作吗?
谢谢。
【问题讨论】:
-
如果你发送的是二进制数据,你确定两个实现的二进制格式匹配吗?
-
问题出在发送数据之前。问题是在客户端打开管道失败。
-
它是如何失败的?您是否遇到异常,应用是否挂起?
-
这是客户端打开管道的方式:
hPipe=CreateFile("\\\\.\\pipe\\mypipe", GENERIC_WRITE,//GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL) ;如果(hPipe!=INVALID_HANDLE_VALUE){返回0; //成功!!! } 错误 = GetLastError(); if(err!=ERROR_PIPE_BUSY) { printf("无法打开管道,GetLastError=%u\n", err);返回 -1 ; }创建文件返回无效句柄。 GetLastError() 返回 2。 -
C#的NamedPipeClientStream,NamedPipeServerStream会自动在名字后面追加“\.\\pipe\”。
标签: c# c++ named-pipes