मैं टीसीपीएसकेट सीख रहा हूं और एक सरल सर्वर लिखा है:
require "socket"
server = TCPServer.open(2000)
loop {
client = server.accept
p client.gets
client.print("bar")
client.close
}
और सरल ग्राहक लिखित:
require "socket"
hostname = "localhost"
port = 2000
socket = TCPSocket.open(hostname, port)
socket.print("foo")
p socket.gets
जब मैं इन्हें अलग टर्मिनलों में चलाता हूंया तो सर्वर या क्लाइंट एक तरफ संचार कर रहा है (यानी एक "प्रिंट" और दूसरा "हो जाता है") मुझे दूसरी तरफ अपेक्षित स्ट्रिंग मिलती है। जब मैं इन्हें लिखित रूप में चलाता हूं, क्लाइंट के साथ सर्वर पर एक संदेश "प्रिंट" होता है और फिर सर्वर को "स्ट्रिंग" करने के लिए क्लाइंट को स्ट्रिंग "प्रिंट" करने के लिए, यह बस लटकता है। इस मुद्दे का कारण क्या है?
उत्तर:
जवाब के लिए 0 № 1आपका प्रोग्राम निम्नलिखित करता है:
कनेक्शन क्लाइंट और सर्वर के बीच स्थापित किया गया है।
ग्राहक की ओर
- कॉल प्रिंट ("foo") - सर्वर पर बिल्कुल 3 बाइट प्रेषित किए जाते हैं।
- कॉल हो जाता है - सर्वर से डेटा के लिए इंतजार कर रहा है लेकिन सर्वर कभी भी कोई नहीं भेजता है।
सर्वर साइड
- कॉल हो जाता है - रूबी फ़ंक्शन पार्स स्ट्रीम प्राप्त करता हैडेटा और यह हमेशा पूरी लाइन वापस आती है। लेकिन सर्वर को केवल "foo" प्राप्त हुआ और यह पता नहीं है कि यह पूरी लाइन है या नहीं। तो यह हमेशा के लिए नए लाइन चरित्र के लिए इंतजार कर रहा है जो ग्राहक कभी नहीं भेजता है।