Jawaban:
Menggunakan nc
( netcat
).
Server:
$ nc -l localhost 3000
Klien:
$ nc localhost 3000
Baik server dan klien akan membaca dan menulis ke output / input standar.
Ini akan berfungsi ketika server dan klien berada di mesin yang sama. Kalau tidak ubah localhost
ke nama eksternal server.
Sedikit lebih menarik, "server" yang memberi Anda waktu sepanjang hari jika Anda terhubung dan mengirimkannya d
, dan yang berhenti jika Anda mengirim q
:
Server (dalam 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 klien:
$ nc localhost 3000 d Kamis 12 Jan 18:04:21 CET 2017 Halo? Apa? q
(server keluar setelah q
, tetapi klien tidak mendeteksi bahwa ia hilang sampai Anda menekan Enter).
Secara umum saran dengan netcat
cara yang lebih baik.
Tetapi di bash
dan ksh
Anda juga dapat melakukan ini:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
? Saya tidak yakin apa yang diwakilinya
echo "request" >&3
, saya kira 1 hanya mubazir
coba netcat (mis 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
) ke server http lokal sayaDalam banyak kasus saya belum memiliki akses ke netcat / socat. Saya juga punya masalah dengan menggunakan bashexec
di lingkungan komputasi terdistribusi.
Karena prevalensinya, solusi alternatif adalah menggunakan kemampuan TCP / IP GNU AWK. Ini memberikan sintaksis sederhana berbasis di sekitar itu "pipa dua arah" operator.
Berikut adalah contoh yang dimodifikasi dari sumber ini yang akan mengirim pesan TCP melalui soket:
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
Sintaks penuh untuk alamat adalah: /net-type/protocol/local-port/remote-host/remote-port
. Ketika local-port
diatur ke 0 host lokal memilih port secara otomatis yang biasanya apa yang Anda inginkan. Anda dapat membaca lebih lanjut tentang gawk
's TCP / IP kemampuan jaringan di sini:
ctrl+c
itu tidak akan menampilkan hasilnya. Jika menggunakan gema, misalnyaecho "cookie" | nc localhost 9090
, aliran output klien akan ditutup (meskipun dikirim) tetapi klien masih akan menunggu hasil server.