configuração do servidor de eco
Eu usei socat
para configurar um servidor de eco UDP assim:
$ socat UDP4-LISTEN:54321,fork EXEC:cat
cliente de eco
$ echo -n "hello" | nc -4u -w1 192.168.56.101 54321
hello
ponta do tcpdump
Ao depurar isso, eu gosto de monitorar a rede, então vou rodar isso para monitorar o 'echo server'
$ tcpdump -i any -vnn port 54321
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
22:33:21.280053 IP (tos 0x0, ttl 64, id 8684, offset 0, flags [none], proto UDP (17), length 33)
192.168.56.1.62439 > 192.168.56.101.54321: UDP, length 5
22:33:21.282140 IP (tos 0x0, ttl 64, id 40761, offset 0, flags [DF], proto UDP (17), length 33)
192.168.56.101.54321 > 192.168.56.1.62439: UDP, length 5
NOTA: Esta dica acima pode ser strongmente modificada para depurar qualquer coisa que esteja acontecendo entre o seu servidor socat / nc e seus clientes.
Entendendo os argumentos de socat
Eu também acho a configuração de socat
exaustiva às vezes. Mas, como qualquer outra coisa, é mais fácil de entender se você dividir em pedaços menores.
$ socat -v udp4-datagram:172.24.176.116:54321 \
open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl
Assim, os dois primeiros switches devem ser óbvios:
-
-v
- verbose -
udp4-datagram:172.24.176.207:54321
- escuta UDP na porta 54321 -
open:/dev/ttyUSB0
- configura o envio de intput / output para seu dispositivo USB # 0 -
raw
- modo bruto, passa entrada / saída não processada -
nonblock
- abre / usa arquivos no modo não bloqueante -
waitlock=/tmp/s0.locak
- cria um arquivo waitlock - protege contra váriossocat
's -
echo=0
- desativa o eco local no servidor -
b115200
- define a taxa de transmissão para 115.200 bits -
crnl
- converte linhas novas de\n
para\r\n
Por acaso, se você olhar na página socat
man, há muitos exemplos. Também descrições completas dos switches acima também estão lá.