2010-01-05 13 views
23

यदि Socket क्लाइंट पक्ष का प्रतिनिधित्व करता है और ServerSocket सर्वर पक्ष का प्रतिनिधित्व करता है, तो क्यों Socket.read सर्वर पक्ष से डेटा पढ़ता है? मैं वास्तव में उलझन में हूं, क्या आप इसे मुझे स्पष्ट कर सकते हैं?सॉकेट और सर्वर सॉकेट के बीच क्या अंतर है?

उत्तर

0

क्योंकि यह पढ़ रहा है कि आपको सर्वर द्वारा भेजा गया है।

1

सर्वर सॉकेट सर्वर सॉर्टपॉइंट की अतिरिक्त सुविधाओं के साथ फिर से सॉकेट है। सर्वर सुविधाओं बंदरगाह सुनने और एक इनकमिंग कनेक्शन आदि को स्वीकार भी शामिल है ...

9

क्योंकि यह डेटा द्वारा भेजा पढ़ रही है क्यों socket.read serverside

से डेटा पढ़ता है नेटवर्क के माध्यम से सर्वर, यह सीधे सर्वर फाइल सिस्टम या resouces (डीबी, राम या उस तरह कुछ भी नहीं पढ़ रहा है) यह डेटा को पढ़ रहा है जो पहले से ही सर्वर सॉकेट द्वारा संसाधित किया गया था।

सॉकेट के बारे में सोचें अपने वेब ब्राउज़र और सर्वरस्केट को दूरस्थ वेबसर्वर के रूप में।

जब आप किसी छवि, पृष्ठ, आदि का अनुरोध करते हैं, तो वेबसर्वर (सर्वर सॉकेट) क्लाइंट को बाइट लिखता है, बदले में क्लाइंट को उन्हें पढ़ना पड़ता है (यह जानने के लिए कि वेबसर्वर सही क्या भेजा गया है?) और उन्हें प्रदर्शित करके संसाधित करें उन्हें अंतिम उपयोगकर्ता को।

सर्वर सॉकेट/सॉकेट के साथ ही कम स्तर पर समान खुशी। सॉकेट सर्वर सॉकेट से जानकारी पढ़ता है।

क्या यह समझ में आता है?

1
+0

जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (// meta.stackoverflow.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। –

0

Socket क्लाइंट साइड के लिए है और ServerSocket सर्वर साइड के लिए है पर एक नजर डालें।

7

java.net.ServerSocket

इस वर्ग सर्वर सॉकेट लागू करता है। एक सर्वर सॉकेट नेटवर्क पर आने के लिए अनुरोधों के लिए प्रतीक्षा करता है। यह उस अनुरोध पर पर आधारित कुछ ऑपरेशन करता है, और फिर संभवतः अनुरोधकर्ता को परिणाम देता है।

java.net.Socket

इस वर्ग के ग्राहक सॉकेट (भी सिर्फ "सॉकेट" कहा जाता है) लागू करता है। एक सॉकेट दो मशीनों के बीच संचार के लिए एक अंतराल है।

20

(मैं इस उत्तर पोस्ट क्योंकि मैं हमेशा लगता है कि यह तर्क सही बनाने के लिए महत्वपूर्ण है।)

मैं तुम्हें निम्न नमूना पर एक नज़र डालें सुझाव देते हैं।

http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

वैसे, जब टीसीपी/आईपी संचार से बाहर ले जाने, सभी आवश्यक जानकारी अकेले Socket वर्ग द्वारा संचार के एकमात्र उद्देश्य के लिए प्रदान किया जा सकता। कोई फर्क नहीं पड़ता कि यह सर्वर पक्ष या ग्राहक पक्ष पर है।

जैसा कि आप उपरोक्त लिंक से देख सकते हैं, सर्वर पक्ष अपने Socket उदाहरण प्राप्त करने के लिए निम्न कोड का उपयोग करें। यही है, अन्य सॉकेट पर पोर्ट पर बनाया गया है।

enter image description here

फिर, सर्वर का उपयोग इस Socket उदाहरण ग्राहक के लिए बात करने के लिए।

और चित्र को पूरा करने के लिए, कोड स्निपेट के नीचे क्लाइंट टी Socket उदाहरण दिखाता है।

enter image description here

तो अगर Socket पहले से ही यह सब कर सकते हैं, यही कारण है कि हम अभी भी ServerSocket की ज़रूरत है?

यह टीसीपी/आईपी प्रोटोकॉल पर संचार के कामकाजी प्रतिमान की वजह से है।

2 कार्यक्रमों टीसीपी/आईपी पर बात करते हैं, आम तौर पर एक निष्क्रिय सुनने/एक <IP:port> पर प्रतीक्षा करें और एक दूसरे सक्रिय रूप से उससे कनेक्ट होगा।

तो आप संचार के इस starting phase पर देख सकते हैं, दोनों पक्षों के बहुत अलग व्यवहार हैं। तो इस अंतर को दर्शाने के लिए 2 अलग-अलग वर्गों का उपयोग किया जाता है।

  • Socket कक्षा सक्रिय पक्ष के व्यवहार को समाहित करती है। (ग्राहक उर्फ)
  • ServerSocket वर्ग निष्क्रिय पक्ष के व्यवहार समाहित (सर्वर उर्फ)

एक बार ServerSocket अपने सुनने के कार्य और detected एक इनकमिंग कनेक्शन पूरा किया है, यह इसके accept() और एक नया Socket पैदा करेगा संचार की सुविधा के लिए उदाहरण।

इसी तरह, java.nio पैकेज में, आपको ServerSocketChannel और SocketChannel कक्षाएं मिलेंगी। और फिर भी, वे इस तरह व्यवहार करते हैं:

ServerSocketChannel -------------> SocketChannel 
         accept() 

तो, कुछ हद तक, मैं @JohnK से सहमत के रूप में वह टिप्पणी, it's more or less just a 6-letter difference में बताया।

+0

जानकारी के रूप में जानकारी प्रदान न करें जो पाठ हो सकता है। –

+0

@KarlRichter यह बेहतर उच्च प्रकाश व्यवस्था के लिए है। – smwikipedia

3

सबसे पहले, के क्या है Socket की तरह लग स्पष्ट करते हैं: 127.0.0.1:8080: एक आम मामले में, Socket आईपी का एक संयोजन और : के माध्यम से बंदरगाह, उदाहरण के लिए है।

तो, आपने Socket का उपयोग कर क्लाइंट-सर्वर एप्लिकेशन बनाने का निर्णय लिया है। बहुत जटिल नहीं है। यहाँ client और server के बीच संबंध बनाने के बारे में संक्षिप्त विवरण है:

सभी की
  1. पहले, आइए उस तथ्य को स्पष्ट, हमारे client अपने ही Socket है और server आईपी पते और पोर्ट जानता है कि करते हैं। server के लिए केवल ServerSocket और पोर्ट प्रदान किया गया है। दोनों ही मामलों बंदरगाह में एक ही नंबर 0 और 65535
  2. के बीच

  3. तो, हम कनेक्ट करने का फैसला किया हैं हमारे client के लिए हमारी server:

    • client ज्ञात आईपी और हमारे server के बंदरगाह के साथ अपने Socket clientSocket वस्तु बनाता है।

    • server अपने ServerSocket.accept() विधि है, जो नए Socket newClientSocket वस्तु (अभी भी एक server पक्ष (!) पर) उत्पन्न करता है के साथ आने वाली कनेक्शन अनुरोध मिला है।

    • आगे का आदान प्रदान डेटा clientSocket और newClientSocket वस्तुओं (clientSocket और ServerSocket के बीच नहीं) के माध्यम से चला जाता है।

Here लगभग पूर्ण बुनियादी कनेक्शन प्रक्रिया को समझने के लिए तस्वीर है (ध्यान रखें कि इस चित्र को Client पर Socket वस्तु - एक ही वस्तुओं)।

इस सरल संरचना को बनाने के बाद, आपको जानकारी पढ़ने और लिखने के लिए Client.clientSocket और Server.newClientSocket दोनों पक्षों पर दो स्ट्रीम खोलने की आवश्यकता है।

1

ServerSocket क्लाइंट से connect के लिए bind पर पोर्ट और listen पर बनाया गया है। तो, एक सर्वर बस एक वार्तालाप की प्रतीक्षा करता है और एक शुरू नहीं करता है।

ClientSocketconnect पर listen आईएनजी सर्वर पर बनाया गया है। ग्राहक कनेक्शन शुरू करता है।

उदाहरण: उदाहरण के रूप में एक इनबाउंड कॉल सेंटर के बारे में सोचें। ये सेवाएं सर्वर हैं। वे कॉल शुरू नहीं करते हैं लेकिन ग्राहकों से आने वाले कॉल की प्रतीक्षा करते हैं। कॉल करने के बाद, वे दो तरह की वार्तालाप में शामिल हो सकते हैं।