2009-09-18 9 views
8

मैं सरल क्लाइंट-सर्वर प्रोग्राम लिख रहा हूं।क्लाइंट का उपयोग सर्वर पक्ष से टीसीपी या यूडीपी का उपयोग कर रहा है अगर

क्लाइंट यूडीपी या टीसीपी का उपयोग कर सर्वर पर कुछ संदेश भेजता है। सर्वर यूडीपी और टीसीपी दोनों का समर्थन करने में सक्षम होना चाहिए।

यदि ग्राहक यूडीपी का उपयोग कर संदेश भेजता है, तो क्लाइंट में विधि कॉल का अनुक्रम 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() को कॉल करता हूं ()।

तो, मैं शुरुआत में इसे कैसे अलग/जान सकता हूं ताकि मैं उपयुक्त फ़ंक्शन कॉल कर सकूं।

धन्यवाद।

+1

तो, क्या मुझे सर्वर की तरफ दो सॉकेट बनाना चाहिए, एक यूडीपी के लिए और दूसरा टीसीपी के लिए? –

+0

seg.server.fault, हाँ। –

+2

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

उत्तर

15

के माध्यम से UDP कनेक्शन कर इससे पहले कि पैकेट आप तक पहुँच जाता है, तो आप क्या यह UDP या TCP है पता नहीं है।

तो यदि आप दोनों तरीकों से अनुरोध की अपेक्षा करते हैं तो आप UDP और TCP सॉकेट दोनों से जुड़ना चाहते हैं।

एक बार ऐसा करने के बाद, आप बस जानते हैं कि सॉकेट द्वारा आपको किस तरह से पैकेट प्राप्त हुआ था। SOCK_STREAM (टीसीपी) या SOCK_DGRAM (यूडीपी)

तो यातायात के दो प्रकार के दो अलग-अलग सॉकेट पर होगा -

1

सिर्फ TCP सॉकेट पोर्ट एक्स पर सुनने, और बंदरगाह वाई

+6

आप उसी पोर्ट पर यूडीपी और टीसीपी पर सुरक्षित रूप से सुन सकते हैं। –

5

जब आप सॉकेट बनाते हैं, आप एक प्रकार गुजरती हैं।

+0

जो सर्वर की तरफ मदद नहीं करता है। ओपी पहले से ही जानता है कि ग्राहक पक्ष टीसीपी बनाम यूडीपी तय करेगा। मुद्दा दोनों सर्वर पक्ष पर उनका समर्थन कर रहा है, और यह सॉकेट प्रकार को बदलने से काफी अधिक प्रयास है। – Tom

संबंधित मुद्दे