Respuestas:
Usando nc
( netcat
).
Servidor:
$ nc -l localhost 3000
Cliente:
$ nc localhost 3000
Tanto el servidor como el cliente leerán y escribirán en la salida / entrada estándar.
Esto funcionará cuando tanto el servidor como el cliente estén en la misma máquina. De lo contrario, cambie localhost
al nombre externo del servidor.
Un poco más interesante, un "servidor" que le da la hora del día si se conecta a él y le envía un d
, y que se cierra si envía q
:
Servidor (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"
Sesión del cliente:
$ nc localhost 3000 re Jue 12 ene 18:04:21 CET 2017 ¿Hola? ¿Qué? q
(el servidor se cierra después q
, pero el cliente no detecta que se ha ido hasta que presiona Enter).
En general, el consejo netcat
es mejor.
Pero en bash
y ksh
también puedes hacer esto:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
? No estoy seguro de lo que eso representa
echo "request" >&3
, supongo que el 1 es simplemente redundante
pruebe netcat (por ejemplo, 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
) a mi servidor http localEn muchos casos no he tenido acceso a netcat / socat. También he tenido problemas con el uso de bash exec
en un entorno informático distribuido.
Debido a su prevalencia, una solución alternativa es utilizar las capacidades TCP / IP de GNU AWK. Proporciona una sintaxis simple basada en su operador de "tubería bidireccional".
Aquí hay un ejemplo modificado de esta fuente que enviará un mensaje TCP a través de un socket:
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
La sintaxis completa de la dirección es: /net-type/protocol/local-port/remote-host/remote-port
. Cuando local-port
se establece en 0, el host local elige el puerto automáticamente, que normalmente es lo que desea. Puede leer más sobre gawk
las capacidades de red TCP / IP aquí:
ctrl+c
no mostrará el resultado. Si usa echo, por ejemploecho "cookie" | nc localhost 9090
, la secuencia de salida del cliente se cerrará (eof enviado) pero el cliente seguirá esperando el resultado del servidor.