मैं सरल क्लाइंट-सर्वर प्रोग्राम लिख रहा हूं।क्लाइंट का उपयोग सर्वर पक्ष से टीसीपी या यूडीपी का उपयोग कर रहा है अगर
क्लाइंट यूडीपी या टीसीपी का उपयोग कर सर्वर पर कुछ संदेश भेजता है। सर्वर यूडीपी और टीसीपी दोनों का समर्थन करने में सक्षम होना चाहिए।
यदि ग्राहक यूडीपी का उपयोग कर संदेश भेजता है, तो क्लाइंट में विधि कॉल का अनुक्रम socket(),bind(),sendto(),recvfrom(),close()
है और सर्वर में socket(),bind(),sendto(),recvfrom(),close()
है।
यदि यह टीसीपी का उपयोग करता है, तो सर्वर में कॉल का अनुक्रम socket(),bind(),listen(),accept(),send(),recv(),close()
है। और है कि ग्राहक में socket(),bind(),connect(),send(),recv(),close()
क्या वह TCP या UDP का उपयोग करना चाहते का चयन करने के शुरू में मेरा कार्यक्रम, उपयोगकर्ता/ग्राहक दिया जाता है चुनाव में है। इसलिए, मेरी मुख्य समस्या यह है कि यदि सर्वर टीसीपी या यूडीपी का उपयोग कर संदेश भेज रहा है, तो मैं सर्वर पक्ष में कैसे जान सकता हूं या अंतर कर सकता हूं। यदि यह टीसीपी का उपयोग करता है, तो मुझे सुनें(), स्वीकार करें(), भेजें(), recv() और यदि यह यूडीपी का उपयोग करता है, तो मैं सुनो() स्वीकार नहीं करता हूं() स्वीकार करता हूं (लेकिन sendto() को कॉल करता हूं ()।
तो, मैं शुरुआत में इसे कैसे अलग/जान सकता हूं ताकि मैं उपयुक्त फ़ंक्शन कॉल कर सकूं।
धन्यवाद।
तो, क्या मुझे सर्वर की तरफ दो सॉकेट बनाना चाहिए, एक यूडीपी के लिए और दूसरा टीसीपी के लिए? –
seg.server.fault, हाँ। –
@ seg.server.fault: मैं आपके क्लाइंट कोड में _not_ कॉलिंग 'बाइंड()' की अनुशंसा करता हूं। हालांकि यह तकनीकी रूप से संभव है (और बहुत विशिष्ट परिस्थितियों में आवश्यक है), क्लाइंट-साइड 'बाइंड()' के बिना डिफ़ॉल्ट व्यवहार आमतौर पर आप एप्लिकेशन लेयर पर चाहते हैं। साथ ही, ध्यान रखें कि आप एक यूडीपी सॉकेट पर _can_ कॉल 'कनेक्ट()' को कॉल करते हैं। यह कोई हैंडशेकिंग नहीं करता है, लेकिन इसका मतलब यह है कि आप 'sendto/recvfrom' के बजाय 'send/recv' का उपयोग कर सकते हैं, जो क्लाइंट तर्क को सरल बना सकता है। – Tom