2010-07-29 22 views
7

java.net.Socket.connect() का उपयोग करते समय, एक अस्वीकृत कनेक्शन और एक टाइमआउट परिणाम ConnectException में परिणाम देता है।कनेक्शन से इनकार कर दिया गया है और कनेक्शन का समय

java.net.ConnectException: Connection timed out: connect 

java.net.ConnectException: Connection refused: connect 

मैं दोनों के बीच सुरक्षित रूप से अंतर कैसे कर सकता हूं? निश्चित रूप से त्रुटि संदेश पार्सिंग नौकरी करता है। लेकिन जब भविष्य में जावा रिलीज में संदेश बदलता है, तो मैं भाग्य से बाहर हूं।

बड़ी तस्वीर: मैं मेट्रो कार्यान्वयन के साथ जेएक्स-डब्ल्यूएस का उपयोग कर एक वेब सेवा क्लाइंट लिख रहा हूं। जब कोई वेब सेवा कॉल विफल हो जाती है, तो मैं विफलता के कारण को स्पष्ट रूप से रिपोर्ट करना चाहता हूं ताकि समस्या को तुरंत हल किया जा सके।

उत्तर

2

दुर्भाग्यवश, सूर्य जेडीके में, यह जानकारी कहीं भी उपलब्ध नहीं है लेकिन स्ट्रिंग। PlainSocketImpl.c (* ix के लिए), और net_util_md.c (विंडोज़ के लिए) की लाइन 473 देखें। * Ix कार्यान्वयन कभी-कभी NET_ThrowByNameWithLastError (* ix net_util_md.c से) को कॉल करता है, जिसमें स्ट्रिंग में त्रुटि शामिल होगी; यह फ़ंक्शन विंडोज पर मौजूद है, लेकिन इसका उपयोग यहां नहीं किया जाता है ..

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

आपको स्ट्रिंग या इरनो मैचों के मामले में फॉल-बैक होना भी सुनिश्चित होना चाहिए।

+0

फॉलबैक होने का एक स्वीकार्य समाधान है। –

+0

मुझे यह जवाब पसंद है, लेकिन मेरे पिछले सुझाव को बनाए रखें: इसे दूर करें! आखिरी चीज जो आप चाहते हैं वह इंटरफ़ेस पर असंगत और दोहराव वाले चेक का एक गुच्छा है जिस पर आप भरोसा नहीं कर सकते। एक इंटरफ़ेस बनाएं जो आपको समझ में आता है, और विवरण को दूर कर देता है। यदि कुछ भी बदलता है तो आप एक दर्जन फाइलों को संपादित नहीं करना चाहते हैं। – riwalk

0

त्रुटि संदेश (जैसे आपने बताया) की जांच करें, लेकिन इसे दूर करें।

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

+1

यदि JVM के स्थानीय संदेश हैं तो यह तुरंत टूट जाएगा। –

3

invoking कनेक्ट() के बीच पारित समय को मापें और अपवाद फेंक दिया गया था, और उस जानकारी को पास कर दिया गया।

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