2015-08-08 7 views
0

Если у меня есть компьютер Windows и Linux в одной локальной сети, могу ли я использовать (называемые) трубы для разговора между ними?Трубы между Windows и Linux-приложениями

Я специально думаю об использовании System.IO.Pipes пространства имен в C# или VB.NET на стороне Windows.

+0

Именованные трубы редко используются для межмашинной связи, почему вы используете их вместо TCP? –

+0

Я как раз в процессе обучения больше о трубах. Windows позволяет использовать каналы между компьютерами Windows в той же локальной сети. Является ли TCP лучше подходит для межмашинных комм? – mcu

ответ

1

Именованные трубы сами по себе не могут выполнить это через IP. Самое простое решение состоит в том, что вы создаете именованный канал на каждой машине и используете netcat (nc в Linux) для отправки информации между трубами.

Я не знаю, как это работает в Windows, но я могу привести пример, сделать это в Linux (точнее, любой современный Unix), и, вероятно, некоторые простой способ сделать адаптировать это для Windows:

machinea хочет поговорить с machineb. A открывает именованный канал в /tmp/mypipe, который записывает какая-то программа. B открывает именованный канал в /tmp/mypipe, о котором читает какая-то программа. B запускает nc -l 9000 > /tmp/mypipe для прослушивания соединений TCP/IP на порте 9000 и записи вывода в именованный канал. A запускает cat /tmp/mypipe | nc machineb 9000 для чтения из своего именованного канала и передает данные чтения netcat, чтобы отправить его на машину B. Конечно, программы, запущенные на A и B, не «заботятся» о том, идет ли информация о канале через TCP/IP; netcat обрабатывает это, и они просто разговаривают с их именованными каналами, однако они должны это делать.

Возможно, вам придется поиграть с порядком, в котором вы открываете именованные каналы, открывать программы, которые читают/записывают в/из них, и запускать команды netcat. Я отвечаю на это по памяти.

-1

Именованные трубы: NEVER Используется для связи между машинами. Именованный канал является специальным inode в файловой системе (что делает его именем, как и любой другой файл). Один процесс вызывает open (2) для чтения или записи (обычно один процесс открывает его для чтения, а другой для написания) и другой процесс подключается к нему через названный FIFO. Именованные fifos реализованы специально в ядре, так как когда FIFO пуст, процесс чтения из него будет заблокирован, ожидая, что он будет иметь данные. Кроме того, когда процесс заполняет FIFO (они имеют ограниченную емкость, поскольку они используют небольшое количество блоков из указателей inode - только прямые блоки), он блокируется при записи, пока какой-либо читатель не опустошит данные fifo.

Поскольку один файл в файловой системе отображается только на сервере, который его размещает, он не имеет видимости сети и не может использоваться в качестве механизма сетевой связи.

Для сетевой связи у вас есть разъем (2) (и друзья). Существует также то, что называется Сокеты домена Unix, которые являются сокетами в смысле двунаправленного (и вам также необходимо их подключить), но являются только для местного использования, главным образом потому, что они не используют полный TCP/IP, чтобы связать один конец с другим. Они появляются, как это (с p в первом положении режима) в Ls (1) объявления:

[email protected]:/run$ ll hogsuspend 
prw------- 1 root root 0 ago 10 16:54 hogsuspend 

и UNIX сокеты сделать это так:

[email protected]:/run$ ll /dev/gpmctl 
srwxrwxrwx 1 root root 0 ago 10 16:54 /dev/gpmctl 

s)

+0

https://msdn.microsoft.com/ru-ru/library/aa365590%28VS.85%29.aspx _Имящие каналы могут использоваться для обеспечения связи между процессами на одном компьютере или между процессами на разных компьютерах по сети. _ – mcu

+0

именованные каналы в microsoft - это не то же самое, что в unix/linux .... –

+0

@mcu, Возможно, это правильно, но это не отменяет моего ответа. Не вижу причин для его недействительности. Именованные каналы для обмена данными между сетевыми узлами требуют определенных средств для обеспечения доступности связи, поэтому я не могу представить простые 'open',' read', 'write' и' close' семантику простых каналов, без поддержки ядра от операционной системы , В любом случае вопрос был ** ... между windows/linux машинами **, что означает взаимодействие. Вы пробовали эти именованные каналы окон для подключения к именованному каналу linux? Как они должны это делать, если Linux не поддерживает его? –