2016-02-16 2 views
2

я написал 2 пары названных программ клиент/сервер труб: 1-й пары в C# (.NET 4) второй пары в C++ (не-управляемый)Именованные каналы: C# сервер, C++ клиент

Все 4 испытания программы используют одно и то же имя трубы \\. \ pipe \ mypipe

Пара C# отлично работает друг с другом - я отправляю сообщение от клиента и принимается сервером. Пара C++ работает также отлично друг с другом.

Но ... когда я пытаюсь запустить клиент C# с сервером C++ или с клиентом C++ с сервером C#, то это не сработает. Клиент не может подключиться к серверу.

Есть ли что-то, препятствующее работе клиента C++ с сервером .NET? Должно ли это работать?

спасибо.

+0

При передаче двоичных данных, вы уверены, что двоичный формат соответствует между двумя реализациями? – crashmstr

+0

Проблема перед отправкой данных. Проблема заключается в том, что открытие трубы на стороне клиента терпит неудачу. – yaronkl

+0

Как это происходит? Вы получаете исключение, приложение зависает? – thorkia

ответ

6

NamedPipeClientStream и NamedPipeServerStream префикс "\\. \ Pipe \" на имя автоматически.

C++ код клиента:

hPipe = CreateFile("\\\\.\\pipe\\mypipe", ...) 

соответствующий # серверный код C:

var pipe = new NamedPipeServerStream("mypipe", ...) 
+0

Спасибо, Алекс, это решило проблему. – yaronkl

+0

@yaronkl, если этот ответ решил вашу проблему, тогда вы должны пометить его как ответ. – crashmstr

+2

Технически NamedPipeClientStream и NamedPipeServerStream добавляют имя \\. \ Pipe \ к имени. Добавлять означает добавить после текста. Если они будут добавлены, имя «mypipe» превратится в «mypipe \\. \ Pipe» – thorkia