回答:
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 d 木1月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サーバーにGET()を送信します多くの場合、私はnetcat / socatにアクセスできませんでした。また、bashの使用に問題がありますexec
、分散コンピューティング環境でました。
その普及のため、代替ソリューションはGNU AWKのTCP / IP機能を使用することです。「双方向パイプ」演算子に基づいたシンプルな構文を提供します。
以下は、ソケットを介して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
、クライアントの出力ストリームは閉じられます(送信されます)が、クライアントはサーバーの結果を待機します。