Відповіді:
Використання nc
( netcat
).
Сервер:
$ nc -l localhost 3000
Клієнт:
$ nc localhost 3000
І сервер, і клієнт будуть читати і записувати на стандартний вихід / вхід.
Це буде працювати, коли і сервер, і клієнт знаходяться на одній машині. В іншому випадку змініть localhost
на зовнішню назву сервера.
Трохи цікавіше "сервер", який дає вам час доби, якщо ви підключитесь до нього та надішлете його d
, і який закриється, якщо ви надішлете q
:
Сервер (в bash
):
#!/bin/bash
coproc nc -l localhost 3000
while read -r cmd; do
case $cmd in
d) date ;;
q) break ;;
*) echo 'What?'
esac
done <&"${COPROC[0]}" >&"${COPROC[1]}"
kill "$COPROC_PID"
Клієнтська сесія:
$ nc localhost 3000 г Чт 12 січня 18:04:21 CET 2017 Здравствуйте? Що? q
(сервер закінчується після q
, але клієнт не виявляє, що він минув, поки ви не натиснете Enter).
Загалом, поради з netcat
кращим способом.
Але в bash
і ksh
ви також можете це зробити:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
? Я не впевнений, що це означає
echo "request" >&3
, я думаю, що 1 просто зайвий
спробуйте netcat (наприклад, nc)
echo GET / HTTP/1.0 | nc 0 80
HTTP/1.1 400 Bad Request
Date: Thu, 12 Jan 2017 13:44:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 311
Connection: close
Content-Type: text/html; charset=iso-8859-1
echo GET / HTTP/1.0
) на свій локальний http-серверУ багатьох випадках у мене не було доступу до netcat / socat. У мене також були проблеми з використанням bash exec
в розподіленому обчислювальному середовищі.
Завдяки своїй поширеності, альтернативним рішенням є використання можливостей TCP / IP GNU AWK. Він надає простий синтаксис, заснований навколо його оператора "двостороння труба".
Ось модифікований приклад з цього джерела, який надсилатиме повідомлення TCP через сокет:
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
Повний синтаксис адреси: /net-type/protocol/local-port/remote-host/remote-port
. Коли local-port
встановлено 0, місцевий хост автоматично вибирає порт, який зазвичай є тим, що ви хочете. Ви можете прочитати більше про gawk
«пд.ш. TCP / IP мережевих можливостей тут:
ctrl+c
не відображатиметься. Якщо використовується ехо, наприкладecho "cookie" | nc localhost 9090
, вихідний потік клієнта буде закритий (eof відправлений), але клієнт все одно чекатиме результат сервера.