2012-12-17 8 views
5

मैंने हेरोकू पर प्रॉक्सीमो एड-ऑन स्थापित किया है और मेरे मौजूदा कमांड को कमांड का भुगतान करते समय, मुझे जावा से बाइंडएक्सप्शन मिलता है। इस प्रकार मेरा प्रीपेन्ड कमांड दिखता है: web: bin/proximo sh target/bin/webapp और जैसे ही मैं प्रॉक्सीमो भाग (bin/proximo) को हटा देता हूं, एप्लिकेशन में कोई त्रुटि नहीं होती है।Herava पर Proximo के साथ java.net.BindException को कैसे ठीक करें?

यह पूर्ण स्टैकट्रैक है। मैं क्या खो रहा हूँ?

Exception in thread "main" java.net.BindException: Cannot assign requested address 
at sun.nio.ch.Net.bind0(Native Method) 
at sun.nio.ch.Net.bind(Net.java:344) 
at sun.nio.ch.Net.bind(Net.java:336) 
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:199) 
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:162) 
at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:297) 
at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:240) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58) 
at org.eclipse.jetty.server.Server.doStart(Server.java:270) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58) 

उत्तर

0

यह बंदरगाह 9999 का उपयोग कर Windows पर किसी अन्य प्रक्रिया से संबंधित कुछ है, कमांड चलाएँ:

netstat -a -n | find "LIST" 

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

InetAddress locIP = InetAddress.getByName("192.168.1.20"); 
serverSocket = new ServerSocket(9999, 0, locIP); 

उपयोग 127.0.0.1:

serverSocket = new ServerSocket(9999); 

के साथ: अगर यह अभी भी काम नहीं करता है, लाइन की जगह।

+0

हालांकि मुझे इस पोस्ट में विज़र के समान अपवाद मिलता है http://stackoverflow.com/questions/8965155/cannot-assign-requested-address-jvm-bind यह एक ही समस्या नहीं है। मैं हेरोोकू पर जावा ऐप चला रहा हूं और सभी आउटबाउंड टीसीपी यातायात को प्रॉक्सी करने के लिए एड-ऑन प्रॉक्सीमो का उपयोग कर रहा हूं। प्रारंभ करते समय, लॉग निम्न दिखाते हैं (Proximo होस्ट XX.XX.XX.XX.XXX:1080 के माध्यम से 0.0.0.0/0 के लिए प्रॉक्सी यातायात बाध्य)। तो, प्रॉक्सीमो ऐड-ऑन स्थापित और कॉन्फ़िगर किया गया प्रतीत होता है। हालांकि, BindException के कारण एप्लिकेशन रोक दिया गया है। मैं अपना खुद का सर्वरसेट शुरू नहीं करता - यह प्रॉक्सीमो एड-इन द्वारा संभाला जाता है। –

+0

मैंने अभी नेटस्टैट किया है grep "1080" (1080 पोर्ट पोर्ट प्रॉक्सीमो बांधने की कोशिश कर रहा है) लेकिन कुछ भी दिखाई नहीं देता है (यानी बंदरगाह अप्रयुक्त है)। अकेले आईपी पिंग करने की कोशिश करते समय, मुझे "अनुरोध का समय समाप्त हो गया" और पोर्ट 1080 पर आईपी पिंग करने की कोशिश करते समय, मुझे "मेजबान नहीं मिला"। मुझे संदेह है कि आईपी (और बंदरगाह) प्रॉक्सीमो किसी भी तरह से सर्वर द्वारा मान्यता प्राप्त करने की कोशिश कर रहा है (हेरोकू अमेज़ॅन सर्वर चलाता है)। क्या इसको हासिल करने के लिए कोई रास्ता है? कोई भी मदद बहुत ही सराहनीय होगी। –

1

याद रखें कि आप केवल उस पोर्ट का उपयोग कर सकते हैं जो Heroku $ PORT var में प्रदान करता है।

इसलिए:

web: bin/proximo [your existing command] 

इस में शामिल करने की जरूरत है, उदाहरण के लिए:

web: bin/proximo [your existing command] -p $PORT 

या जो भी आप बंदरगाह अपने वेब प्रक्रिया पर चलता है हुक्म चलाना करने की जरूरत है।

0

प्रॉक्सीमो रैपर जावा के साथ काम नहीं करता है। रैपर का उपयोग करने के बजाय, आपको अपने ऐप के प्रारंभ में कुछ कस्टम कोड जोड़ना होगा।

URL proximo = new URL(System.getenv("PROXIMO_URL")); 
String userInfo = proximo.getUserInfo(); 
String user = userInfo.substring(0, userInfo.indexOf(':')); 
String password = userInfo.substring(userInfo.indexOf(':') + 1); 

System.setProperty("socksProxyHost", proximo.getHost()); 
Authenticator.setDefault(new ProxyAuthenticator(user, password)); 

और

private class ProxyAuthenticator extends Authenticator { 
    private final PasswordAuthentication passwordAuthentication; 

    private ProxyAuthenticator(String user, String password) { 
    passwordAuthentication = new PasswordAuthentication(user, password.toCharArray()); 
    } 

    @Override 
    protected PasswordAuthentication getPasswordAuthentication() { 
    return passwordAuthentication; 
    } 
} 

समाधान this article में पूरी तरह से वर्णित है।

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