मैंने सॉकेट के बारे में SO पर कई संसाधन देखे हैं। मेरा मानना है कि उनमें से कोई भी उन विवरणों को कवर नहीं करता जिन्हें मैं जानना चाहता था। मेरे आवेदन में, सर्वर सभी प्रसंस्करण करता है और ग्राहकों को आवधिक अद्यतन भेजता है।सी # में सॉकेट प्रोग्रामिंग के साथ शुरू करना - सर्वोत्तम प्रथाओं
इस पोस्ट का इरादा सॉकेट एप्लिकेशन विकसित करते समय आवश्यक सर्वोत्तम बुनियादी विचारों को कवर करना और सर्वोत्तम प्रथाओं पर चर्चा करना है। यहां मूलभूत चीजें हैं जिन्हें आप लगभग सभी सॉकेट आधारित अनुप्रयोगों के साथ देखेंगे।
1 - बाध्यकारी और एक सॉकेट
मैं निम्नलिखित कोड का उपयोग कर रहा पर सुन। यह मेरी मशीन पर अच्छी तरह से काम करता है। जब मैं इसे वास्तविक सर्वर पर तैनात करता हूं तो क्या मुझे किसी और चीज की देखभाल करने की ज़रूरत है?
IPHostEntry localHost = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint endPoint = new IPEndPoint(localHost.AddressList[0], 4444);
serverSocket = new Socket(endPoint.AddressFamily, SocketType.Stream,
ProtocolType.Tcp);
serverSocket.Bind(endPoint);
serverSocket.Listen(10);
2 - प्राप्त डेटा
मैं एक 255 आकार बाइट सरणी का इस्तेमाल किया है। तो जब मुझे 255 बाइट्स से अधिक डेटा प्राप्त हो रहा है, तो मुझे पूरा डेटा प्राप्त होने तक प्राप्त विधि को कॉल करने की आवश्यकता है, है ना? एक बार मुझे पूरा डेटा मिलने के बाद, मुझे पूरा संदेश प्राप्त करने के लिए अब तक प्राप्त सभी बाइट्स को जोड़ना होगा। क्या वो सही है? या क्या एक बेहतर दृष्टिकोण है?
3 - डेटा भेजा जा रहा है और डेटा लंबाई निर्दिष्ट करने
चूंकि टीसीपी में कोई रास्ता नहीं है संदेश की लंबाई प्राप्त करने के लिए मिल रहा है, मैं संदेश के लिए लंबाई जोड़ने की योजना बना रहा हूँ। यह पैकेट का पहला बाइट होगा। इसलिए क्लाइंट सिस्टम जानता है कि पढ़ने के लिए कितना डेटा उपलब्ध है।
कोई अन्य बेहतर दृष्टिकोण?
4 - ग्राहक समापन
जब ग्राहक बंद कर दिया है, यह सर्वर के लिए एक संदेश भेज देंगे पास का संकेत है। सर्वर क्लाइंट विवरण को इसकी ग्राहक सूची से हटा देगा। सॉकेट को डिस्कनेक्ट करने के लिए क्लाइंट साइड पर इस्तेमाल किया गया कोड (मैसेजिंग भाग दिखाया नहीं गया है)।
client.Shutdown(SocketShutdown.Both);
client.Close();
कोई सुझाव या समस्याएं?
5 - सर्वर बंद
सर्वर सभी ग्राहकों के बंद का संकेत करने के लिए संदेश भेजता है। जब यह संदेश प्राप्त होता है तो प्रत्येक क्लाइंट सॉकेट को डिस्कनेक्ट कर देगा। ग्राहक सर्वर पर बंद संदेश भेज देंगे और बंद कर देंगे। एक बार जब सर्वर सभी ग्राहकों से घनिष्ठ संदेश प्राप्त करता है, तो यह सॉकेट को डिस्कनेक्ट करता है और सुनना बंद कर देता है। संसाधनों को जारी करने के लिए प्रत्येक ग्राहक सॉकेट पर पर कॉल करें। क्या यह सही दृष्टिकोण है?
6 - अज्ञात क्लाइंट डिस्कनेक्शन
कभी कभी, एक क्लाइंट सर्वर को सूचित किए बिना डिस्कनेक्ट कर सकते हैं। इसे संभालने की मेरी योजना यह है: जब सर्वर सभी ग्राहकों को संदेश भेजता है, तो सॉकेट स्थिति की जांच करें। यदि यह कनेक्ट नहीं है, तो उस क्लाइंट को क्लाइंट सूची से हटा दें और उस क्लाइंट के लिए सॉकेट बंद करें।
कोई भी मदद महान होगी!
में इस विषय पर अधिक जानकारी प्राप्त कर सकते हैं मैं IPAddress के साथ मुद्दों खिड़कियों के कुछ पुराने संस्करण पर सुन लिया है। IPAddress ipAddress का उपयोग करना = नया आईपीएड्रेस (नया बाइट [] {0, 0, 0, 0}); मेरे लिए सबसे अच्छा प्रतीत होता है! – clamchoda