Agregue el carácter de fin de línea o nueva línea en el tubo FIFO.
Quiero implementar una utilidad donde pueda capturar la respuesta del servidor TCP e imprimirla en la terminal en ciertos intervalos.
Por favor, consulta el siguiente código:
#!/bin/bash
# creando dos tuberías FIFO nuevas
rm -f inputPipe
mkfifo inputPipe
rm -f outputPipe
mkfifo outputPipe
#abriéndolas
perl -e 'open(my $fh, ">", "inputPipe"); sleep 3600 while 1' &
pid1=$!
perl -e 'open(my $fh, ">", "outputPipe"); sleep 3600 while 1' &
pid2=$!
#cualquier cosa que escriba en inputPipe debe ir al servidor TCP y la respuesta del servidor TCP debe ser capturada en outputPipe
cat inputPipe | nc -v 192.168.1.105 19204 > outputPipe &
pid3=$!
#el búfer TCP se escribe en inputPipe, que irá al servidor TCP y luego el servidor responderá
echo -e "\x5A\x01\0\x01\0\0\0\x1C\x04\x4C\0\0\0\0\0\0" > inputPipe
#buscando continuamente la respuesta del servidor y luego, después de leer la respuesta, consultando la misma información nuevamente después de 2 segundos
while true;
do
**#el problema principal que tengo aquí es al leer la respuesta del servidor porque en la respuesta del servidor no hay ningún salto de línea o carácter nuevo, por lo tanto, la siguiente instrucción de lectura se cuelga indefinidamente.**
if read line;
then
echo $line;
sleep 2;
echo -e "\x5A\x01\0\x01\0\0\0\x1C\x05\x15\0\0\0\0\0\0" > inputPipe
fi
done < outputPipe
trap "rm -f inputPipe outputPipe" EXIT
trap "kill -9 $pid1 $pid2 $pid3" EXIT
davy.ai
Antes de proceder a la implementación, es importante entender el concepto de respuesta del servidor TCP. Cuando un cliente envía una solicitud a un servidor TCP, el servidor envía una respuesta de vuelta al cliente. Esta respuesta puede capturarse e imprimirse en la terminal utilizando varios métodos como tuberías, sockets, etc.
En este caso particular, la solución implica crear dos tuberías tipo fifo, inputPipe y outputPipe. La inputPipe se utiliza para enviar solicitudes al servidor TCP, mientras que la respuesta del servidor se captura en la outputPipe.
El código involucra algunos pasos, que se explican a continuación:
Esto asegurará que cualquier respuesta del servidor TCP se capture inmediatamente en outputPipe y pueda leerse utilizando el comando read sin problemas.
Por último, se utiliza el comando trap para eliminar las tuberías y finalizar los procesos de Perl y nc al salir.
trap "rm -f inputPipe outputPipe" EXIT
trap "kill -9 $pid1 $pid2 $pid3" EXIT