我正在尝试通过命名管道发送一些数据。我在C#中创建了命名管道服务器,在MQL5中创建了客户端(它只是一个C ++包装器)。服务器工作正常,可以从用C#编写的命名管道客户端访问,因此通信 C#< - > C#工作正常。此外,我尝试了实用程序PipeList,它还显示我的管道服务器是可见的和可用的。
唯一的问题是使用MQL5(C ++)编写的客户端 - 它找不到管道服务器的路径,因此通信 MQL< - > C#失败。
有人可以建议:
服务器:
NamedPipeServerStream pipeStream = new NamedPipeServerStream("MQL5", PipeDirection.In, 1, PipeTransmissionMode.Byte)
我还尝试了完整路径\\\\。\\ pipe \\ MQL5但没有成功
客户:
CFilePipe iPipe;
while(IsStopped() == false)
{
Print("This loop is infinite because there is no connection");
if (iPipe.Open("\\\\.\\pipe\\MQL5", FILE_READ | FILE_WRITE | FILE_BIN) != INVALID_HANDLE) break;
Sleep(250);
}
感谢。
答案 0 :(得分:1)
找到答案。似乎这只是我自己的错误,或者这就是Pipes在MQL中的工作方式 - 通道总是需要双工,所以C#中的行需要替换为以下内容:
NamedPipeServerStream pipeStream = new NamedPipeServerStream(name, PipeDirection.InOut, 1, PipeTransmissionMode.Byte)
参数PipeDirection。 InOut 表示管道是双向的。
P.S。虽然它有点奇怪,因为连接C#Server< - > C#Client可以在两种模式下工作(输入/输出或其中一种)
答案 1 :(得分:1)
服务器: C#/ 客户端 MetaTrader
我还有两个问题: