2012-10-02 24 views
11

जावा Socket कक्षा में दो विधियां isClosed और isConnected हैं, यह जांचने के लिए कि क्रमशः सॉकेट बंद है या कनेक्ट है या नहीं। मैं जानना चाहता था कि एक टीसीपी सॉकेट के बीच क्या अंतर है जो केवल खुला है और एक टीसीपी सॉकेट जो खुला और जुड़ा हुआ है, और यह यूडीपी से अलग कैसे है।क्या एक सॉकेट जो खुला है और जो सॉकेट जुड़ा हुआ है, के बीच का अंतर क्या है?

उत्तर

8

बातें बस में कहें, एक Socket कि है खुला सॉकेट कि कनेक्शन के लिए प्रतीक्षारत है या तो या सफलतापूर्वक एक और Socket के साथ जुड़ा हुआ है है। जब एक सॉकेट बंद कर दिया गया है, तो इसका मतलब है कि यह सॉकेट अब कनेक्शन के लिए उपलब्ध नहीं है, और यह संसाधन पहले से ही जारी कर दिया गया है। एक Socket जो जुड़ा हुआ है, ठीक है, इसका मतलब है कि सॉकेट किसी अन्य Socket से जुड़ा हुआ है।

तो एक Socket सकते हैं ..

  • खुला और एक ही समय में जुड़ा हुआ हो।
  • खुले रहें और एक ही समय में कनेक्ट न हों।
  • बंद होने पर कनेक्ट नहीं किया जा सकता है।

अद्यतन

@Bryan

से

जाहिर है, वहाँ टीसीपी सॉकेट के लिए आधा बंद कर दिया या आधा खुला राज्यों कर रहे हैं; कौन सा उपयोग (आज) अपने मूल अर्थ से अलग है। इस link पर और अधिक।

+2

सादगी के लिए +1 अभी तक स्पष्टता –

+1

चीजों को भ्रमित नहीं करने के लिए, लेकिन टीसीपी में आधा बंद राज्य भी है जहां अभी भी एक कनेक्शन है लेकिन अब यह एकजुट है। –

7

यह पृष्ठ सॉकेट राज्यों पर काफी अच्छा अवलोकन देता है: http://diranieh.com/SOCKETS/SocketStates.htm और टीसीपी और यूडीपी सॉकेट के बीच का अंतर। विशेष रूप से:

  • राज्य "खोलें" (TCP और UDP): एक अनाम सॉकेट बनाया गया है। एक अनाम सॉकेट वह है जो स्थानीय पते और पोर्ट
  • राज्य "कनेक्टेड" (केवल टीसीपी) से जुड़ा हुआ नहीं है: स्थानीय और दूरस्थ होस्ट के बीच एक एसोसिएशन (वर्चुअल सर्किट) स्थापित किया गया है। डेटा भेजना और प्राप्त करना अब संभव है।

नोट java.net.DatagramSocket के नए कार्यान्वयन टीसीपी/आईपी नेटवर्क राज्यों के लिए एक विस्तार का समर्थन करने वाले: एक DatagramSocket भी, राज्य "जुड़ा" में किया जा सकता है ताकि isConnected() जरूरी भी झूठी वापस नहीं करता है हालांकि नेटवर्क स्तर पर डेटाग्राम सॉकेट कभी "कनेक्ट" नहीं होता है। विशेष रूप से: "जब एक डेटाग्राम सॉकेट किसी दूरस्थ पते से कनेक्ट होता है, तो पैकेट केवल उस पते से भेजे या प्राप्त किए जा सकते हैं। डिफ़ॉल्ट रूप से डेटाग्राम सॉकेट कनेक्ट नहीं होता है।"

अधिक जानकारी के लिए, sources और JavaDoc देखें।

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