использование socat для мультиплексирования входящего TCP-соединения

Внешний поставщик данных устанавливает TCP-соединение с одним из наших серверов.

Я хотел бы использовать socat для «мультиплексирования» входящих данных, чтобы несколько программ могли получать данные, отправленные от внешнего поставщика данных.

socat -u TCP4-LISTEN:42000,reuseaddr,fork OPEN:/home/me/my.log,creat,append

с радостью принимает входящие данные и помещает их в файл.

Что я хотел бы сделать, так это то, что позволит локальным программам подключаться к TCP-порту и начинать получать данные, поступающие от подключений к внешнему порту. Я старался

socat -u TCP4-LISTEN:42000,reuseaddr,fork TCP4-LISTEN:43000,reuseaddr 

но это не работает. Мне не удалось найти в документе socat какие-либо примеры, которые кажутся относящимися к параллельным серверам TCP.

Может ли кто-нибудь указать мне в правильном направлении?


person RoyHB    schedule 05.07.2013    source источник
comment
Не кажется, что это будет особенно сложно реализовать с нуля, но сначала необходимо определить основные правила — например, что должно произойти, если один клиент не сможет своевременно принять данные?   -  person Chris Stratton    schedule 05.07.2013
comment
То, что вы пробовали, работает для меня. Каким образом это не сработало для вас?   -  person Armali    schedule 05.07.2013


Ответы (2)



Я нашел ncat ( http://nmap.org/ncat/) более гибким и простым в использовании. Я предлагаю вам попробовать. В настоящее время я не могу протестировать его для вас, чтобы найти точную команду, но вы можете позволить ему прослушивать 2 порта; для одного порта вы используете опцию -k для приема нескольких клиентов.

person Eric    schedule 25.02.2014
comment
Я обнаружил, что ncat является самым простым для такого рода одностороннего мультиплексирования данных TCP, например, если удаленная служба находится на порту 5000 на example.com, запустите на своем «промежуточном» сервере следующее: ncat -C example.com 5000 | ncat -l -k 5000 затем вы можете подключиться к промежуточный сервер и получать данные, выводимые с помощью example.com (например, nc intermediate.local 5000). Согласно документам, это подходит для 100 подключений; 60 в Windows, настраивается добавлением -m <numconns> к слушающему ncat. - person Dan; 14.04.2021
comment
Просто пропустил окно редактирования - вышеприведенное для неправильного направления (предполагается, что промежуточная машина является клиентом, подключающимся к example.com), например, например, подключение в качестве клиента к промежуточной машине: ncat -l 5000 | ncat -l -k 5001 и подключение и получение данных с nc intermediate.local 5001 - person Dan; 14.04.2021