使用 Socat 以广播模式将 GPS 数据发送到 UDP

使用 Socat 以广播模式将 GPS 数据发送到 UDP

MUPLEX 是一个使用 SOCAT 的 Linux 脚本,它可以混合不同的真实输入流或模拟串行 NMEA 数据,并使用虚拟串行端口和/或 TCP 在多个应用程序之间共享它。现在,我将以 UDP 广播模式将数据发送到许多终端;我尝试了许多地址/选项的组合,并从网上寻找示例,但没有结果。

例如简单形式:

# parameters port for standard NMEA
params_port="b4800,raw,clocal=1,cs8,cstopb=0,parenb=0,crtscts=0,echo=0,icanon"
# GPS port
dev_gps=/dev/ttyUSB0

# network is 192.168.127.0, GPS is on the 192.168.127.1 machine
# testing broadcast
# first enable ping
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
ping -c5 -b 192.168.127.255
# result OK

# send datas to 10110 UDP port
socat -d -v FILE:$dev_gps,$params_port UDP4-DATAGRAM:192.168.127.255:10110,broadcast

没有错误,但有来自客户端的任何数据:

netcat -u 192.168.127.1 10110

或者

socat -d UDP:192.168.127.1:10110 -

如果有人有解决方案,我们欢迎他!

完整的 Muplex 脚本如下: http://marinux.tuxfamily.org

答案1

我记得曾经遇到过类似的问题,解决方案是转向“多播”语法,即: socat -d -v FILE:$dev_gps,$params_port UDP4-RECVFROM:10110,ip-add-membership=224.1.0.1:192.168.127.10,fork

接收端,socat UDP4-DATAGRAM:224.1.0.1:10110,range=192.168.127.0/24 -

我想这个x.x.x.255东西已经被悄悄地搁置了,但我必须查找一下才能确定。

相关内容