2012-12-17 27 views
5

我已經在Heroku上安裝了Proximo插件,並且在將命令添加到我現有的命令時,我得到了Java的BindException。這就是我的前綴命令的外觀:web: bin/proximo sh target/bin/webapp,當我刪除Proximo部分(bin/proximo)時,應用程序啓動時沒有錯誤。如何解決Heroku中的java.net.BindException與Proximo?

這是完整的堆棧跟蹤。我錯過了什麼?

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" 

它應該列出任何那裏多數民衆贊成佔用的端口。當然,你必須在任務管理器中手動關閉這些程序。與你的實際IP地址

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

使用127.0.0.1:如果這仍然不起作用,更換線路:

serverSocket = new ServerSocket(9999); 

帶。

+0

雖然我在本文中得到與Visher相同的異常http://stackoverflow.com/questions/8965155/cannot-assign-requested-address-jvm-bind它不是同一個問題。我在Heroku上運行Java應用程序,並使用附加的Proximo代理所有出站TCP通信。啓動時,日誌顯示以下內容(通過Proximo主機XX.XX.XX.XXX:1080將代理流量限制爲0.0.0.0/0)。所以,Proximo插件似乎已經正確安裝和配置。但是,由於BindException,應用程序停止。我不啓動我自己的ServerSocket - 它由Proximo加載項處理。 –

+0

我剛剛做了一個netstat | grep「1080」(1080是Proximo試圖綁定的端口),但沒有顯示(即端口未使用)。當試圖單獨ping IP時,我得到「Request timed out」,當試圖在端口1080上ping IP時,我得到「找不到主機」。我懷疑IP(和端口)Proximo試圖綁定到某種程度上被服務器識別(Heroku運行亞馬遜服務器)。有沒有辦法做到這一點?任何幫助是極大的讚賞。 –

1

請記住,您只能使用Heroku在$ PORT var中提供的端口。

因此:

web: bin/proximo [your existing command] 

需要包括這個,e.g:

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

或任何你需要決定你的網絡進程運行的端口。

0

proximo包裝器不適用於Java。而不是使用包裝器,您將不得不添加一些自定義代碼到您的應用程序的初始化。

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充分的描述。

相關問題