我已經安裝了一個服務器,在heroku上使用ServerSocket運行。我知道heroku在一個系統定義的變量中定義了端口,我也在使用它。以下是Heroku上的服務器代碼片段。Java客戶端插座不能regonize heroku服務器
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(Integer.parseInt(System.getenv("PORT"));
System.out.println("Booted server. " + Integer.parseInt(System.getenv("PORT"));
System.out.println(serverSocket);
} catch (IOException e) {
System.err.println("Could not listen on port: " + Integer.parseInt(System.getenv("PORT"));
System.exit(1);
}
Socket clientSocket = null;
try {
while (true) {
clientSocket = serverSocket.accept()
ConnectionHandler c = new ConnectionHandler(clientSocket);
}
運行的是和檢查Heroku的日誌顯示服務器正在運行的罰款,
2013-11-22T03:02:21.940969+00:00 app[web.1]: Booted server. 40506
2013-11-22T03:02:21.953200+00:00 app[web.1]: ServerSocket[addr=0.0.0.0/0.0.0.0,localport=40506]
下一頁我運行Android應用程序,需要發送/接收信息。這是連接到端口的代碼片段。
clientSocket = new Socket(http://appname.herokuapp.com, 40506);
但是我得到上述行logcat的以下內容:
java.net.UnknownHostException: Unable to resolve host "http://appname.herokuapp.com": No address associated with hostname
at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
at java.net.InetAddress.getAllByName(InetAddress.java:214)
at java.net.Socket.tryAllAddresses(Socket.java:108)
at java.net.Socket.<init>(Socket.java:177)
at java.net.Socket.<init>(Socket.java:149)
at com.example.taid.FullscreenActivity.CheckAccount(FullscreenActivity.java:241)
是什麼造成這個錯誤?這不是正確的服務器地址嗎?在服務器端,當接受一個新的連接時,我確實有一個打印語句(測試目的),並從網絡瀏覽器轉到url打印語句,因此heroku接受連接。
另外幾件事情我在Heroku上注意到:
1)每隔幾分鐘端口會從某個IP的連接。在單次運行期間,IP與端口遞增1相同。這些連接是什麼?我能阻止他們嗎? 2)當我使用命令打印變量端口(cmd> heroku run echo $ PORT)時,我意識到這個端口總是與我的服務器啓動時不同。那麼這個行的問題是:System.getenv(「PORT」)?
任何幫助表示讚賞,一直試圖解決這toooooo長。
感謝您的及時回覆。試圖改變這一點,這是有道理的,但沒有影響。 – slash
你在這裏使用的應用程序的實際名稱?我假設appname是一個放置者。如果您查找應用程序的DNS名稱,「nslookup YOUR_ACTUAL_APP_NAME.herokuapp.com」 - 是否解決? – Winfield
沒關係,這實際上工作!我忘了從字符串中刪除最後一個'/'。雖然,服務器仍然沒有獲得連接。但這是一個不同的錯誤。接受答案。 – slash