Crie ponte UDP para TCP com socat / netcat para retransmitir comandos de controle para o media player vlc

2

O UDP - deve escutar na porta. O TCP - deve se conectar a um servidor.

Eu tentei netcat e socat .

nc -v -u -l -p 3333 | nc -v 127.0.0.1 50000

socat -v UDP-LISTEN:3333,fork TCP:localhost:50000

Ambos trabalham - eles entregaram a mensagem - mas a linha não está terminada. O VLC só receberá o comando se eu fechar o netcat / socat.

Eu monitorei a conexão com sockettest e as mensagens são uma após a outra na mesma linha, assim:

playpausestopexitadd

Eu preciso que a linha seja finalizada para que a mensagem transmitida seja assim:

play
stop
exit
add

Talvez o pacote não tenha terminado?

Eu estou querendo saber se nc ou socat tem opções para enviar o pacote / linha final após um determinado período de tempo.

Se eu adicionar \n à saída, como sugerido por @roaima, receberei play\nstop\nplay\n em uma única linha.

    
por Mihai Popescu 02.03.2016 / 17:04

1 resposta

7

Eu suspeito que o seu problema é mais porque tudo o que envia os pacotes UDP não é adicionar um caractere de nova linha aos comandos (como no caso eles devem enviar "play\n" e não apenas "play" ).

Em qualquer caso, se você quiser que uma nova conexão TCP seja criada para cada um dos pacotes UDP, use udp-recvfrom em vez de udp-listen in socat :

socat -u udp-recvfrom:3333,fork tcp:localhost:50000

Em seguida, todo pacote UDP deve acionar uma conexão TCP que é ativada apenas para enviar o conteúdo do pacote e, em seguida, encerrada.

Teste fazendo:

echo play | socat -u - udp-sendto:localhost:3333

(que envia um pacote UDP cuja carga contém os 5 bytes "play\n" ).

    
por 02.03.2016 / 18:00