मुझे जावा में सीखने के उद्देश्यों के लिए बहुप्रचारित डेटाग्राम सॉकेट बनाने में समस्याएं आ रही हैं।

मेरे पास एक सर्वर वर्ग है जो दो धागे को भेजता है और प्राप्त करता है जिनमें से प्रत्येक में वर्तमान में परीक्षण उद्देश्यों और संचार के लिए विभिन्न बंदरगाहों के लिए एक ही आईपी "लोकलहोस्ट" है।

दूसरे छोर पर मेरे पास एक क्लाइंट क्लास है जो सेंड पोर्ट से कनेक्शन डेटा प्राप्त करता है और फिर सर्वर के रिसीव पोर्ट के माध्यम से दूसरे पैकेट के लिए अनुरोध देता है।

मेरे पास समस्या यह है कि जब मैं उन दोनों को चलाता हूं तो सर्वर डेटा भेजता है और क्लाइंट इसे प्राप्त करता है लेकिन विपरीत दिशा ....

तो क्या किसी को पता है कि समस्या क्या हो सकती है .... मैं क्लाइंट और सर्वर के बीच एक ही मशीन पर इंटरकम्युनिकेशन प्रक्रियाओं को कैसे चला सकता हूं यह देखने के लिए कि यह कैसे चलता है ....

यहाँ कोड का एक हिस्सा है

दो धागों को बिखेरना:-

    SendServer SendThread = new SendServer();
SendThread.run();
RecieveServer RecieveThread = new RecieveServer();
RecieveThread.run();

प्रेषण धागे में मैं स्थानीयहोस्ट और पोर्टनो के साथ डेटाग्राम पैकेट घोषित करता हूं और इसी तरह मैं इसे किसी अन्य पोर्ट नंबर के साथ प्राप्त थ्रेड के लिए करता हूं

क्लाइंट साइड में मैं 2 बंदरगाहों के साथ 2 सॉकेट लिखता हूं और एक भेजने के लिए और दूसरा प्राप्त करने के लिए उपयोग करता हूं ...

इस प्रोग्राम में क्या त्रुटि है... क्या एक बार में एक थ्रेड चलाने की समस्या सर्वर साइड पर रिसीविंग नहीं करती है ??

कृपया सहायता कीजिए..

0
user506710 13 फरवरी 2011, 18:45

1 उत्तर

सबसे बढ़िया उत्तर

यदि सर्वर और क्लाइंट एक ही मशीन पर चलने वाले हैं, तो उन्हें अलग-अलग पोर्ट नंबरों को सुनना होगा। ऐसा लगता है कि अभी आपके पास क्लाइंट और सर्वर दोनों के लिए एक पोर्ट नंबर का उपयोग करने वाला रिसीवर है और क्लाइंट और सर्वर दोनों के लिए प्रेषक दूसरे का उपयोग कर रहा है। वह जोड़ी गलत है। आप चाहते हैं कि सर्वर के प्रेषक और रिसीवर एक पोर्ट नंबर का उपयोग करें और क्लाइंट के प्रेषक और रिसीवर एक अलग पोर्ट नंबर का उपयोग करें।

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

0
unholysampler 13 फरवरी 2011, 21:55
नहीं @unholysampler अगर यह भ्रमित करने वाला लगता है तो मुझे खेद है, लेकिन मैंने सर्वर और क्लाइंट को प्राप्त करने के लिए एक ही जोड़ी का उपयोग किया है और इसके विपरीत ...
 – 
user506710
13 फरवरी 2011, 19:30
@ user506710: चूंकि यह अभी भी अस्पष्ट लगता है, क्या आप प्रत्येक सॉकेट के लिए उपयोग किए जा रहे वास्तविक पोर्ट नंबरों का एक उदाहरण सूचीबद्ध कर सकते हैं। मैंने मल्टीथ्रेडिंग पर चर्चा करने और उसी पोर्ट नंबर का उपयोग करने के लिए अपना उत्तर भी संपादित किया।
 – 
unholysampler
13 फरवरी 2011, 21:53