Réponses:
Utilisation de nc
( netcat
).
Serveur:
$ nc -l localhost 3000
Client:
$ nc localhost 3000
Le serveur et le client lisent et écrivent sur la sortie / entrée standard.
Cela fonctionnera lorsque le serveur et le client se trouvent sur la même machine. Sinon, changez localhost
le nom externe du serveur.
Un peu plus intéressant, un "serveur" qui vous donne l'heure du jour si vous vous connectez à lui et lui envoyez un d
, et qui se ferme si vous envoyez q
:
Serveur (en 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"
Session client:
$ nc localhost 3000 ré Jeu.12 janv.18: 04: 21 CET 2017 Bonjour? Quelle? q
(le serveur se ferme après q
, mais le client ne détecte pas qu'il a disparu tant que vous n'avez pas appuyé sur Enter).
En général, les conseils netcat
sont mieux.
Mais dans bash
et ksh
vous pouvez aussi le faire:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
? Je ne sais pas ce que cela représente
echo "request" >&3
, je suppose que le 1 est juste redondant
essayez netcat (par exemple 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
) à mon serveur http localDans de nombreux cas, je n'ai pas eu accès à netcat / socat. J'ai également eu des problèmes avec l'utilisation de bash exec
dans un environnement informatique distribué.
En raison de sa prévalence, une solution alternative consiste à utiliser les capacités TCP / IP de GNU AWK. Il fournit une syntaxe simple basée sur son opérateur de "canal bidirectionnel".
Voici un exemple modifié de cette source qui enverra un message TCP sur un socket:
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
La syntaxe complète de l'adresse est: /net-type/protocol/local-port/remote-host/remote-port
. Lorsque local-port
est défini sur 0, l'hôte local choisit automatiquement le port, qui correspond généralement à ce que vous souhaitez. Vous pouvez en savoir plus sur gawk
des » capacités de réseau TCP / IP ici:
ctrl+c
ne montrera pas le résultat. Si vous utilisez echo, par exempleecho "cookie" | nc localhost 9090
, le flux de sortie du client sera fermé (eof envoyé) mais le client attendra toujours le résultat du serveur.