Envoyer une réponse en fonction de la demande du client

J’essaie de créer un socket sur lequel le client reçoit une réponse en fonction de sa demande, mais je ne peux pas comprendre comment y parvenir avec CentOS 7.

Jusqu’à présent, j’ai ouvert le socket sur le port 100 et enregistré la demande du client dans un fichier:

#!/bin/sh nc -lvk 88.109.110.161 100 > port100.txt 2>&1 

En tant que client, j’envoie la demande:

 echo "Hello" | nc 88.109.110.161 100 

Et le fichier est rempli avec:

 Ncat: Version 6.40 ( http://nmap.org/ncat ) Ncat: Listening on 88.109.110.161:100 Ncat: Connection from 88.109.110.161. Ncat: Connection from 88.109.110.161:47578. Hello 

Je souhaite que le client reçoive la réponse en fonction de la requête, si la requête est Bonjour, puis reçoit World, si World alors Hello. Comment puis je faire ça?

Ok, je suis sur macOS maintenant, donc nc est probablement légèrement différent sur CentOS 7 , mais l’exemple ci-dessous devrait être utile de toute façon. Si vous souhaitez modifier le texte transmis au script du serveur, puis imprimé, essayez de le modifier avant de le redirect vers un fichier. Utilisez pipe pour le traiter en boucle, par exemple:

 #!/bin/sh nc -lvk 127.0.0.1 8080 | while read in do echo '------' if [[ $in == 'Hello' ]]; then echo 'World' elif [[ $in == 'World' ]]; then echo 'Hello' else echo "$in" fi done | tee out.txt 

Certaines demandes de clients pour tester: echo 'test' | nc 127.0.0.1 8080 echo 'World' | nc 127.0.0.1 8080 echo 'Hello' | nc 127.0.0.1 8080 echo 'test' | nc 127.0.0.1 8080 echo 'World' | nc 127.0.0.1 8080 echo 'Hello' | nc 127.0.0.1 8080

Exemple de sortie:

 ------ test ------ Hello ------ World ^C 

Merci à tee sortie sera également dans out.txt . Je viens de redirect stdout pour plus de simplicité.