3

我的服务器和客户端代码可以完美地用作 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");
    }
}

}

4

2 回答 2

2

首先确保您的应用具有互联网权限。

唯一可以使用 10.0.2.2 别名的情况是,如果您的应用程序在模拟器上运行并且想要联系在主机上运行的某些东西。这不适用于实际的 android 设备。

对于实际的 android 设备,您要么必须将设备与托管服务器的 PC 放在同一个 wifi 网络上,要么找到一种滥用网络共享解决方案的方法,通过 USB 电缆将它们放在同一个网络上,或者移动您的服务器到可以从 Internet 外部访问的机器,以便能够从设备的移动网络连接访问它。

EvilDuck 肯定有关于滥用 UI 线程的观点。

于 2012-04-26T17:56:20.517 回答
0

As I understand you are running Android client on a device in the same network as your server? Then you must use your servers internal IP. Localhost here will search servers on a device obviously.

whatsmyip.org will give you your external IP.

Make sure device is indeed on the same network, make sure you're using correct internal IP, make sure your server doesn't have any firewall blocking this port for LAN.

And for stop doing network activity on UI thread ffs!!!

于 2012-04-26T15:42:47.290 回答