2013-02-05 29 views
5

मैं एक कनेक्शन स्थापित करने के लिए बस एक (सरल, स्टार्टर्स के लिए) सर्वर-क्लाइंट चीज़ प्रोग्राम करने की कोशिश कर रहा हूं और देख रहा हूं कि यह काम करता है या नहीं। और यह करता है। जब तक मैं अपनी चार दीवारों/नेटवर्क के अंदर रहता हूं। जैसे ही मैं अपने राउटर आईपी के माध्यम से जाने की कोशिश करता हूं, क्लाइंट एक शक्तिशाली ठीक त्रुटि संदेश उत्पन्न करता है। सभी सामान्य संदिग्धों को समाप्त कर दिया गया है: राउटर पोर्ट अग्रेषण चालू है, फ़ायरवॉल हस्तक्षेप नहीं करता है (ठीक है, यह तब भी काम नहीं करता है जब मैं इसे बंद करता हूं), और canyouseeme.org कहता है कि यह मेरे चुने हुए कनेक्शन को स्थापित कर सकता है जब सर्वर चलाता है पोर्ट।जावा नेटवर्किंग सर्वर-क्लाइंट त्रुटि

यहां सर्वर के लिए स्रोत कोड है, क्योंकि मुझे पता चला कि थोड़ा टेलनेटिंग के साथ कमांड लाइन के माध्यम से जाना संभव था। जब मैं एक कनेक्शन स्थापित करने की कोशिश, यह सिर्फ कहते हैं Could not open connection to the host, on port 49163:Connection failed

सर्वर:

import java.net.*; 
import java.io.*; 

public class ChatServer { 
    public static void main(String[] args) throws IOException { 

     ServerSocket server = null; 

     try { 
      System.setProperty("java.net.preferIPv4Stack" , "true"); 
      server = new ServerSocket(49163); 
     } catch (IOException e) { 
      System.err.println("Could not listen on port: 49163."); 
      System.exit(1); 
     } 

     Socket client = null; 
     try { 
      client = server.accept(); 
     } catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.exit(1); 
     } 

     PrintWriter out = new PrintWriter(client.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(newInputStreamReader(client.getInputStream())); 
     String inputLine; 
     String outputLine; 

     out.println("Connection established"); 
     while ((inputLine = in.readLine()) != null) { 
      if (inputLine.equals("exit")) { 
       break; 
      } 
     outputLine = inputLine; 
     out.println(outputLine); 
     } 
     out.close(); 
     in.close(); 
     client.close(); 
     server.close(); 
     System.out.println("Server offline"); 
    } 
} 

ओह, हाँ, preferIP4vStack कुछ मैं Stackoverflow पर उठाया था, लेकिन यह मेरे लिए काम करने के लिए प्रतीत नहीं होता।

किसी कारण से मैं क्लाइंट के लिए कोड को उलझाने में सक्षम नहीं हूं, मुझे स्वरूपण के बारे में संदेश मिलते रहते हैं, और मैं इसे समझ नहीं पा रहा हूं। लेकिन जिस तरह से मैं इसे देखता हूं वह यह है कि मैं कमांड लाइन के माध्यम से कनेक्ट करने में भी सक्षम नहीं हूं (जब मैं "असली" आईपी से कनेक्ट करने का प्रयास करता हूं), तो ग्राहक को शामिल होने की आवश्यकता नहीं है। लेकिन आप के लिए वैसे भी त्रुटि देखना चाहते हैं जो:

java.net.ConnectException: Connection refused: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(Unknown Source) 
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at ChatClient.main(ChatClient.java:12) 
+0

क्या आप अपवाद फेंक रहे क्लाइंट (क्लाइंट?) कोड पोस्ट कर सकते हैं? इसके अलावा, अगर आपको अपवाद फेंकने के साथ एक ही शैली को रखा जाता है, तो उपयोगकर्ता के अनुकूल संदेश के अलावा पूर्ण स्टैक ट्रेस को प्रिंट करने में मदद मिल सकती है। – Windle

+0

विशाल, और आप इसे कैसे जानते हैं? –

+0

@ निकोलई एनफेटिसोव: मेरी गलती। ओपी के माध्यम से त्रुटि से गुजरने के दौरान कुछ बच निकला था। –

उत्तर

0

मुझे नहीं पता कि मुझे हंसने या रोने का अनुमान है या नहीं। एक दोस्त ने मुझे बताया कि मई, शायद समस्या यह हो सकती है कि मैं नेटवर्क-इंटर्न पीसी से बाहरी आईपी के साथ लॉग इन करने का प्रयास करता हूं, जो कि कुछ रहस्यमय कारणों से बाहर नहीं निकल सकता है या वापस नहीं जा सकता है। मिला किसी और से कोशिश करने और लॉगिन करने के लिए कोई, और voila! एक जादू की तरह काम करता है।

0

नहीं की मेजबानी के लिए खुले कनेक्शन, बंदरगाह 49,163 पर किया जा सका: कनेक्शन विफल

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

  • 'कनेक्शन अस्वीकार कर दिया', जिसका अर्थ है आप लक्ष्य मेजबान या बंदरगाह गलत है, या एक फ़ायरवॉल
  • 'कनेक्शन का समय समाप्त' है, जो है:

    संदेश शायद में से एक होगी नेटवर्क कनेक्टिविटी समस्या

  • 'होस्ट करने का कोई मार्ग नहीं', जो आईपी रूटिंग समस्या
  • 'अज्ञात होस्ट' है, जिसका अर्थ है कि आपको सर्वर का नाम गलत है।
+0

ठीक है, मैंने सॉकेट बनाने से पहले आईपीवी 4 डाला, – tr0n0m

+0

मैंने क्लाइंट कोड जोड़कर मूल प्रश्न संपादित करने का प्रयास किया, लेकिन यह मुझे बता रहा था कि स्वरूपण सही नहीं था। त्रुटि संदेश "कनेक्शन अस्वीकार कर दिया गया है: कनेक्ट करें"। – tr0n0m