我有作为 Java 应用程序完美运行的服务器和客户端代码。服务器在我的本地计算机上运行并监听端口 4444。任何 Java 应用程序都可以轻松连接,但是当我将代码移至 Android 时,无论我尝试什么,我都会收到 IOException。我读到您必须将“localhost”更改为“10.0.2.2”,但我仍然收到 IOException。我从 whatsmyip.org 尝试了我的 IP 地址,但它仍然给我一个 IOException。这是我的安卓代码...
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");
}
}
最佳答案
首先确保您的应用具有互联网权限。
您唯一可以使用 10.0.2.2 别名的情况是您的应用程序在模拟器上运行并且想要联系在主机上运行的东西。这不适用于实际的 android 设备。
对于实际的 Android 设备,您要么必须将该设备置于与托管服务器的 PC 相同的 wifi 网络中,要么想办法滥用网络共享解决方案以通过 USB 数据线将它们置于同一网络中,或者将您的服务器移动到一台可以从外部访问的机器上,以便能够通过设备的移动网络连接访问它。
EvilDuck 滥用 UI 线程肯定有道理。
关于java - 如何将 Android 程序套接字到本地主机服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10336637/