जवाबों:
का उपयोग कर nc
( netcat
)।
सर्वर:
$ nc -l localhost 3000
ग्राहक:
$ nc localhost 3000
सर्वर और क्लाइंट दोनों मानक आउटपुट / इनपुट को पढ़ेंगे और लिखेंगे।
यह तब काम करेगा जब सर्वर और क्लाइंट दोनों एक ही मशीन पर हों। अन्यथा localhost
सर्वर के बाहरी नाम में परिवर्तन करें।
थोड़ा और अधिक दिलचस्प है, एक "सर्वर" जो आपको दिन का समय देता है यदि आप इसे कनेक्ट करते हैं और इसे भेजते हैं d
, और यदि आप भेजते हैं, तो q
:
सर्वर (में 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"
ग्राहक सत्र:
$ एनसी लोकलहोस्ट 3000 घ थु जन 12 18:04:21 सीईटी 2017 नमस्कार? क्या? क्ष
(सर्वर के बाद बाहर निकलता है q
, लेकिन ग्राहक यह पता नहीं लगाता है कि यह तब तक चला है जब तक आप दबाते हैं Enter)।
सामान्य सलाह के साथ netcat
बेहतर तरीका है।
लेकिन में bash
और ksh
आप यह भी कर सकते हैं:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
? मुझे यकीन नहीं है कि जो प्रतिनिधित्व करता है
echo "request" >&3
, मुझे लगता है कि 1 सिर्फ निरर्थक है
netcat का प्रयास करें (उदा। 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
अपने स्थानीय http सर्वर पर एक GET ( ) भेजता हूंकई मामलों में मुझे netcat / socat तक पहुँच नहीं मिली है। मेरे पास exec
वितरित कंप्यूटिंग वातावरण में बैश का उपयोग करने के मुद्दे भी हैं।
इसकी व्यापकता के कारण, एक वैकल्पिक समाधान GNU AWK की टीसीपी / आईपी क्षमताओं का उपयोग करना है। यह "टू-वे पाइप" ऑपरेटर के आसपास आधारित एक सरल वाक्यविन्यास प्रदान करता है।
इस स्रोत से एक संशोधित उदाहरण यहां दिया गया है जो एक सॉकेट पर एक टीसीपी संदेश भेजेगा:
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
पते के लिए पूर्ण वाक्य रचना है: /net-type/protocol/local-port/remote-host/remote-port
। जब local-port
0 पर सेट किया जाता है तो स्थानीय होस्ट अपने आप पोर्ट को चुन लेता है जो आमतौर पर आप चाहते हैं। आप के बारे में अधिक पढ़ सकते हैं gawk
के टीसीपी / आईपी नेटवर्किंग क्षमताओं यहाँ:
ctrl+c
नहीं दिखाएगा। यदि इको का उपयोग किया जाता है, उदाहरण के लिएecho "cookie" | nc localhost 9090
, क्लाइंट का आउटपुट स्ट्रीम बंद हो जाएगा (ईओएफ भेजा गया) लेकिन क्लाइंट अभी भी सर्वर के परिणाम का इंतजार करेगा।