Antworten:
Mit nc
( netcat
).
Server:
$ nc -l localhost 3000
Klient:
$ nc localhost 3000
Sowohl der Server als auch der Client lesen und schreiben auf die Standardausgabe / -eingabe.
Dies funktioniert, wenn sich Server und Client auf demselben Computer befinden. Andernfalls ändern Sie localhost
den externen Namen des Servers.
Etwas interessanter ist ein "Server", der Ihnen die Uhrzeit anzeigt, wenn Sie eine Verbindung herstellen und eine senden d
, und der beendet wird, wenn Sie senden q
:
Server (in 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"
Client-Sitzung:
$ nc localhost 3000 d Do 12 Jan 18:04:21 CET 2017 Hallo? Was? q
(Der Server wird nach dem Beenden beendet q
, der Client erkennt jedoch erst, wenn Sie auf drücken. Enter)
Generell ist Rat mit dem netcat
Weg besser.
Aber in bash
und ksh
du kannst das auch machen:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
? Ich bin nicht sicher, was das darstellt
echo "request" >&3
, ich denke, die 1 ist einfach überflüssig
versuche netcat (zB 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
) an meinen lokalen http-ServerIn vielen Fällen hatte ich keinen Zugriff auf netcat / socat. Ich hatte auch Probleme mit der Verwendung von bash exec
in einer verteilten Computerumgebung.
Aufgrund seiner Verbreitung besteht eine alternative Lösung darin, die TCP / IP-Funktionen von GNU AWK zu nutzen. Es bietet eine einfache Syntax basierend auf dem Operator "Two-Way-Pipe".
Hier ist ein modifiziertes Beispiel aus dieser Quelle , das eine TCP-Nachricht über einen Socket sendet:
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
Die vollständige Syntax für die Adresse lautet: /net-type/protocol/local-port/remote-host/remote-port
. Wenn der local-port
Wert auf 0 gesetzt ist, wählt der lokale Host automatisch den gewünschten Port aus. Weitere gawk
Informationen zu den TCP / IP-Netzwerkfunktionen finden Sie hier:
ctrl+c
wird das Ergebnis nicht angezeigt. Wenn Sie beispielsweise Echo verwenden,echo "cookie" | nc localhost 9090
wird der Ausgabestream des Clients geschlossen (eof gesendet), der Client wartet jedoch weiterhin auf das Ergebnis des Servers.