2009-01-03 15 views
6

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

मैं ऑनगेट थ्रेड ईवेंट का उपयोग कर नए सर्वर थ्रेड (TServerClientThread) बना देता हूं। सक्रिय कनेक्शन की संख्या प्राप्त करने के लिए मैंने 'सॉकेट.एक्टिव कनेक्शन' प्रॉपर्टी का उपयोग किया।

दुर्भाग्य से मुझे नहीं पता कि तब क्या करना है। मैंने ऑनगेट थ्रेड प्रक्रिया के अंदर कोई धागा बनाने की कोशिश नहीं की, जब कनेक्शन की संख्या सीमा से ऊपर है, लेकिन यह कुछ भी नहीं बदला - क्लाइंट, भले ही वह कोई जानकारी भेजने या प्राप्त करने में असमर्थ है, यह सर्वर से कनेक्ट हो सकता है और जुड़े रह सकता है। नए क्लाइंट को कनेक्ट करने की अनुमति न दें या उन्हें कनेक्ट करने की अनुमति न दें, लेकिन तुरंत कनेक्शन तोड़ दें?

+0

अच्छा सवाल। मैं इस तरह कुछ ऐसा करने के लिए देख रहा हूँ, बहुत समय पर! – robsoft

उत्तर

14

पिछली बार मैंने डेल्फी का इस्तेमाल कुछ साल पहले किया था, लेकिन मेरे पास एक समान स्थिति थी और मेरा अनुभव आपके लिए उपयोगी हो सकता था: मुझे एक ही समस्या का सामना करना पड़ रहा था और "इंडी" घटक (बड़े) आवेदन बंदरगाह के लायक नहीं था। जहां तक ​​मैं याद कर सकते हैं, तो आपको सर्वर सॉकेट पर एक onClientConnect घटना नहीं होनी चाहिए और यहाँ होते मैं सीमा के लिए जाँच की है:

.onClientConnect(Sender: TObject; aSocket: T...) 
begin 
    if(YourServerSocket.ActiveConnections > YourDefinedMaxConnections) 
    begin 
     // Drop the connection 
     aSocket.Close; 
    end; 
end 

मुझे लगता है कि अधिक से अधिक अन्य याद नहीं कर सकते, लेकिन मैं मुझे लगता है कि इन पंक्तियों पर कुछ किया, या कम से कम यह वह चीज थी जिसके साथ मैं आया था।

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