বার্তা-পাসিং একটি উচ্চ স্তরে প্রয়োগ করা প্রয়োজন; টিসিপিতে কোনও বার্তার ধারণা নেই - টিসিপি সংযোগগুলি অক্টেটের স্ট্রিমগুলি প্রবাহ করে।
আপনি পাইপগুলির সাথে নামকরণnc
এবং নামকরণের মতো সাজানোর মতো কিছু অর্জন করতে পারেন , দেখুন man mkfifo
; অথবা socat
অ্যালেক্স স্ট্রজি ইঙ্গিত হিসাবে পরীক্ষা করুন ।
মাঝারি স্তরের পরিষেবা ব্যতীত প্রাথমিক সমস্যাগুলি হ'ল (১) অন্য প্রান্তে কেউ না শুনলে নেটওয়ার্কে ডেটা লেখা যায় না এবং (২) টিসিপি সংযোগ দ্বি-দিকনির্দেশক।
যেহেতু আপনি নেটওয়ার্কে ডেটা লিখতে পারবেন না যদি না কেউ এর জন্য শোনেন তবে আপনার ডেটা প্রেরণের আগে আপনাকে অবশ্যই সর্বদা শ্রোতাদের শুরু করতে হবে। (একটি বার্তা প্রেরণ সিস্টেমে বার্তাগুলি পরিচালনা করার প্রক্রিয়াটি এক ধরণের বাফারিং সরবরাহ করবে))
আপনার উদাহরণ সহজেই আবার লেখা যেতে পারে:
প্রথমে মেশিন 2 (গন্তব্য) এ শ্রোতা শুরু করুন:
nc -l 1234 | ...some processing with the received data...
আপনার উদাহরণে, এটি হবে
nc -l 1234 | cat
এটি ব্লক করবে এবং 1234 পোর্টে কেউ ডেটা প্রেরণের জন্য অপেক্ষা করবে।
তারপরে আপনি মেশিন 1 (উত্স) থেকে কিছু ডেটা প্রেরণ করতে পারেন:
...make up some data... | nc machine2 1234
আপনার উদাহরণে, এটি হবে
echo "Hello" | nc machine2 1234
আপনি যদি কোনও উপায়ে প্রাপ্ত ডেটা প্রক্রিয়া করতে চান এবং প্রতিক্রিয়া জানাতে চান তবে আপনি শেলের কপ্রোসেসিং সুবিধাটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, এটি একটি খুব সাধারণ (এবং খুব জেদী) ওয়েব সার্ভার:
#! /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
অ্যারেতে ফাইল বর্ণনাকারী ব্যবহার করে কীভাবে স্ক্রিপ্টের মূল অংশ এবং কপ্রোসিসের মধ্যে দ্বি-নির্দেশমূলক যোগাযোগ অর্জন করা হয় তা দেখুন $ncfd
।