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 localhostle 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 3000while read -r cmd;docase $cmd in
d) date ;;
q)break;;*) echo 'What?'esacdone<&"${COPROC[0]}">&"${COPROC[1]}"
kill "$COPROC_PID"
Si le serveur renvoie un résultat lorsque le client a fini d'envoyer des données, le ctrl+cne montrera pas le résultat. Si vous utilisez echo, par exemple echo "cookie" | nc localhost 9090, le flux de sortie du client sera fermé (eof envoyé) mais le client attendra toujours le résultat du serveur.
Dans de nombreux cas, je n'ai pas eu accès à netcat / socat. J'ai également eu des problèmes avec l'utilisation de bash execdans 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-portest 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 gawkdes » 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.En général, les conseils
netcat
sont mieux.Mais dans
bash
etksh
vous pouvez aussi le faire:la source
1>&3
? Je ne sais pas ce que cela représenteecho "request" >&3
, je suppose que le 1 est juste redondantessayez netcat (par exemple nc)
echo GET / HTTP/1.0
) à mon serveur http localla source
Dans 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:
La syntaxe complète de l'adresse est:
/net-type/protocol/local-port/remote-host/remote-port
. Lorsquelocal-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 surgawk
des » capacités de réseau TCP / IP ici:la source