2012-04-26 58 views
2

我有服務器和客戶端代碼,作爲一個Java應用程序完美工作。服務器在我的本地機器上運行,並在端口4444上偵聽。任何Java應用程序都可以輕鬆連接,但是當我將代碼移到Android時,無論我嘗試什麼,都會收到IOException。我讀過你必須將「localhost」更改爲「10.0.2.2」,但我仍然收到IOException。我從whatsmyip.org嘗試了我的IP地址,但它仍然給我一個IOException。這裏是我的Android代碼...如何將Android程序套接至本地主機服務器?

package test.myPackage; 

import java.io.IOException; 
import java.net.Socket; 
import java.net.UnknownHostException; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class TestProjectActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView tv = new TextView(this); 
     tv.setText("Hello, Android"); 
     setContentView(tv); 

    Socket s = null; 
    try { 
     s = new Socket("10.0.2.2", 4444); 
     tv.setText("socket: CONNECTED!"); 
    } catch (UnknownHostException e) { 
     tv.setText("socket: unknown host"); 
    } catch (IOException e) { 
     tv.setText("socket: IO Exception"); 
    } 
} 

}

+0

您的本地網絡上的IP是什麼?你在Linux或Windows?在窗口上打開一個命令窗口並在其中鍵入'ipconfig'。只需將你的'IPV4'放入你的代碼中即可。在linux上打開一個終端並執行'ifconfig'。顯然你的ISP已經阻止了從外面訪問你的機器。你的公共IP不是你想要的。 – 2012-04-26 15:51:24

回答

2

首先確保您的應用程序具有互聯網許可。

您唯一可以使用10.0.2.2別名的方式是,如果您的應用程序在模擬器上運行,並且想要聯繫託管計算機上運行的某些內容。這不工作與實際的Android設備。

對於實際的Android設備,您必須將設備放置在與託管服務器的PC相同的WiFi網絡上,找到一種濫用共享解決方案的方法,使其通過USB電纜連接到同一網絡上,或將您的服務器移動到可從外部從互聯網上訪問的機器,以便能夠通過設備的移動網絡連接訪問它。

EvilDuck肯定有一個關於濫用UI線程的觀點。

+0

問題是我的應用程序沒有互聯網許可。我在清單中添加了 現在它可以工作。謝謝! – user1080952 2012-04-26 18:37:52

0

據我所知,您在相同的網絡服務器中的設備上運行Android客戶端?那麼你必須使用你的服務器的內部IP。這裏的Localhost顯然會在設備上搜索服務器。

whatsmyip.org會給你你的外部IP。

確保設備確實在同一網絡上,確保您使用的是正確的內部IP,確保您的服務器沒有任何防火牆阻止此端口用於LAN。

並停止在UI線程ffs上進行網絡活動!

相關問題