Mesaj geçirmenin daha yüksek bir katmana uygulanması gerekir; TCP'nin bir mesaj nosyonu yoktur - TCP bağlantıları sekizli akımları aktarır.
İstediğiniz nc
ve boru isimleri gibi bir şey elde edebilirsiniz , bakın man mkfifo
; veya socat
Alex Stragies'in işaret ettiği gibi kontrol edin .
Orta katman hizmeti olmadan, temel sorunlar (1) diğer ucunda dinleyen biri olmadığı sürece verilerin ağa yazılamaması ve (2) TCP bağlantılarının çift yönlü olmamasıdır.
Birisi dinlemediği sürece ağa veri yazamadığınız için, veri gönderebilmeniz için önce dinleyiciyi başlatmanız gerekir . (İleti geçirme sisteminde, iletileri işleme alma işlemi bir tür arabelleğe alma sağlar.)
Örneğiniz kolayca yeniden yazılabilir:
İlk olarak makinede bir dinleyici başlatın2 (hedef):
nc -l 1234 | ...some processing with the received data...
Örneğinizde, bu
nc -l 1234 | cat
Bu, birisinin 1234 numaralı bağlantı noktasına veri göndermesini engelleyecek ve bekleyecektir.
Ardından machine1'den (kaynak) bazı veriler gönderebilirsiniz:
...make up some data... | nc machine2 1234
Örneğinizde, bu
echo "Hello" | nc machine2 1234
Alınan verileri bir şekilde işlemek ve yanıtlamak istiyorsanız kabuğun birlikte işleme tesisini kullanabilirsiniz. Örneğin, bu çok basit (ve çok inatçı) bir web sunucusudur:
#! /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
Dizideki dosya tanımlayıcılarını kullanarak komut dosyasının ana gövdesi ile yardımcı işlem arasındaki çift yönlü iletişimin nasıl sağlandığını görün $ncfd
.