java - 如何将 Android 程序套接字到本地主机服务器?

标签 java android sockets networking

我有作为 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/

相关文章:

iphone - 客户端-服务器保持连接,每次iPhone锁定时我是否需要重新连接和重新登录?

java - 如何为每个节点指定唯一的名称

java - Volley 请求总是得到错误监听器

android - 只下载新图像

android - 连续自动滚动ListView

c - 我如何告诉套接字在不关闭它的情况下丢弃所有未决数据?

java - 没有可用于类型的源代码。您是否忘记继承所需的模块

java - 为什么 string.split 无法读取以下格式的文件?

android - Android 中的 com.android.volley.AuthFailureError

python - 套接字错误 : [Errno 102] Operation not supported on socket