Отправить ответ на основании запроса клиента - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать сокет, где клиент получает ответ на основании своего запроса, но я не могу понять, как этого добиться в CentOS 7.

До сих пор у меня был открыт сокет на порту 100 и я сохранял запрос клиента в файл:

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

В качестве клиента отправляю запрос:

echo "Hello" | nc 88.109.110.161 100

И файл заполняется:

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

Я хочу, чтобы клиент получил ответ, основанный на запросе, если запросом является Hello, тогда получим World, если World, то Hello. Как я могу это сделать?

1 Ответ

0 голосов
/ 02 мая 2018

Хорошо, я сейчас на macOS, поэтому nc, вероятно, немного отличается от CentOS 7, но приведенный ниже пример должен быть полезен в любом случае. Если вы хотите изменить текст, передаваемый серверному скрипту, который затем распечатывается, попробуйте изменить его перед перенаправлением в файл. Используйте pipe для обработки в цикле while, например:

#!/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

Некоторые клиентские запросы для тестирования: echo 'test' | nc 127.0.0.1 8080 echo 'World' | nc 127.0.0.1 8080 echo 'Hello' | nc 127.0.0.1 8080

Пример вывода:

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

Благодаря tee вывод будет также в out.txt. Я просто перенаправил stdout для простоты.

...