Odpowiedzi:
Używanie nc
( netcat
).
Serwer:
$ nc -l localhost 3000
Klient:
$ nc localhost 3000
Zarówno serwer, jak i klient będą czytać i zapisywać na standardowe wyjście / wejście.
Działa to, gdy zarówno serwer, jak i klient znajdują się na tym samym komputerze. W przeciwnym razie zmień localhost
zewnętrzną nazwę serwera.
Nieco bardziej interesujący, „serwer”, który podaje godzinę, jeśli się z nim połączysz i wyślesz d
, i który kończy działanie, jeśli wyślesz q
:
Serwer (w 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"
Sesja klienta:
$ nc localhost 3000 re Czw 12 stycznia 18:04:21 CET 2017 Witaj? Co? q
(serwer wychodzi później q
, ale klient nie wykrywa, że zniknął, dopóki nie naciśniesz Enter).
Ogólnie rzecz biorąc, porady netcat
są lepsze.
Ale bash
i ksh
można też to zrobić:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
? Nie jestem pewien, co to oznacza
echo "request" >&3
, myślę, że 1 jest po prostu zbędny
spróbuj netcat (np. 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
) na mój lokalny serwer httpW wielu przypadkach nie miałem dostępu do netcat / socat. Miałem również problemy z używaniem basha exec
w rozproszonym środowisku komputerowym.
Ze względu na powszechność, alternatywnym rozwiązaniem jest wykorzystanie możliwości TCP / IP GNU AWK. Zapewnia prostą składnię opartą na operatorze „potoku dwukierunkowego”.
Oto zmodyfikowany przykład z tego źródła , który wyśle komunikat TCP przez gniazdo:
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
Pełna składnia na adres: /net-type/protocol/local-port/remote-host/remote-port
. Gdy local-port
ustawiony jest na 0, lokalny host automatycznie wybiera port, który zwykle jest tym, czego chcesz. Możesz przeczytać więcej na temat gawk
„s możliwości TCP / IP networking tutaj:
ctrl+c
nie zostanie wyświetlony. Jeśli używasz echa, np.echo "cookie" | nc localhost 9090
Strumień wyjściowy klienta zostanie zamknięty (eof wysłany), ale klient nadal będzie czekał na wynik serwera.