Penyampaian pesan perlu diimplementasikan pada lapisan yang lebih tinggi; TCP tidak memiliki gagasan tentang pesan - koneksi TCP mentransfer aliran oktet.
Anda dapat mencapai sesuatu seperti apa yang Anda minta nc
dan beri nama pipa , lihat man mkfifo
; atau periksa socat
seperti yang ditunjukkan Alex Stragies.
Tanpa layanan lapisan tengah, masalah dasarnya adalah (1) bahwa data tidak dapat ditulis ke jaringan kecuali ada orang di ujung lain yang mendengarkannya, dan (2) bahwa koneksi TCP bersifat dua arah.
Karena Anda tidak dapat menulis data ke jaringan kecuali seseorang mendengarkannya, Anda harus selalu memulai pendengar sebelum Anda dapat mengirim data. (Dalam sistem pesan lewat proses penanganan pesan akan memberikan semacam buffering.)
Contoh Anda dapat dengan mudah ditulis ulang:
Pertama mulai pendengar di machine2 (tujuan):
nc -l 1234 | ...some processing with the received data...
Dalam contoh Anda, ini akan menjadi
nc -l 1234 | cat
Ini akan memblokir dan menunggu seseorang mengirim beberapa data ke port 1234.
Kemudian Anda dapat mengirim beberapa data dari machine1 (sumber):
...make up some data... | nc machine2 1234
Dalam contoh Anda, ini akan menjadi
echo "Hello" | nc machine2 1234
Jika Anda ingin memproses data yang diterima dengan cara tertentu dan meresponsnya, Anda dapat menggunakan fasilitas pemrosesan shell. Sebagai contoh, ini adalah server web yang sangat sederhana (dan sangat keras kepala):
#! /bin/bash
while :; do
coproc ncfd { nc -l 1234; }
while :; do
read line <&${ncfd[0]} || break
line="$(
echo "$line" |
LC_ALL=C tr -cd ' -~'
)"
echo >&2 "Received: \"$line\""
if [ "$line" = "" ]; then
echo >&${ncfd[1]} "HTTP/1.0 200 OK"
echo >&${ncfd[1]} "Content-Type: text/html"
echo >&${ncfd[1]} "Connection: close"
echo >&${ncfd[1]} ""
echo >&${ncfd[1]} "<title>It works!</title>"
echo >&${ncfd[1]} "<center><b>It works!</b></center>"
echo >&${ncfd[1]} "<center>-- $(date +%Y-%m-%d\ %H:%M:%S) --</center>"
break
fi
done
kill %%
sleep 0.1
done
Lihat bagaimana komunikasi dua arah dicapai antara badan utama skrip dan proses-proses menggunakan deskriptor file dalam array $ncfd
.