Я написал небольшую программу на C, которая реализует Modbus Master и Slave на основе библиотеки libmodbus. Эта программа установлена в системе Ubuntu 16.04.6 LTS (A) и работает отлично.
Если я запускаю один экземпляр моей программы как Modbus Slave, я могу опрашивать его локально с другого экземпляра, работающего как Master (target = localhost: 502). Однако, если я попытаюсь опросить ведомое устройство с другого устройства (B) в той же сети, я получу сообщение «Не удалось подключиться к порту TCP. Порт закрыт».
[РЕДАКТИРОВАТЬ]
В случае OP отладка с помощью netcat
показала, что проблема не в сети или в системе Ubuntu, где выполнялся процесс прослушивания. В частности, ведомый процесс может быть получен из localhost
, но не от другого хоста в той же сети.
Проблема, следовательно, должна была заключаться в кодировании. Оказалось, что сокет был привязан к локальному адресу (127.0.0.1) вместо IP-адреса. Пакеты, поступающие из сети через этот интерфейс, никогда не попадут в процесс прослушивания.