【问题标题】:How to transfer "data" between two device (android,iphone)?如何在两个设备(android,iphone)之间传输“数据”?
【发布时间】:2012-05-11 23:00:00
【问题描述】:

如何在两台设备之间传输数据?我想在不同平台(android、iphone)之间传输数据(主要是图像文件)。是否可以使用 p2p 或者我应该使用客户端-服务器?

任何帮助将不胜感激。

【问题讨论】:

  • android2android 可以看到 BTchat 演示。但是 Iphone 中的 BT 不是为这种用途而设计的。
  • 你想通过什么机制进行这样的转移?蓝牙、wifi、互联网——以上任何一种?
  • 我想使用 3G 或 wifi 通过互联网传输数据。
  • 您在问题中标记了跨平台,那么您是否使用了手机间隙或任何适用于 iOS 和 Android 的混合应用程序开发?所以你想在这些混合移动应用程序之间传输文件 - 如果我错了,请纠正我?
  • 你是对的。我想在运行在 android 和 iphone 上的应用程序之间传输文件。这个想法与 Bump 非常相似,但我找不到任何资料来解释它在技术上是如何工作的。

标签: android ios cross-platform p2p data-transfer


【解决方案1】:

你看过Qualcomm's AllJoyn library吗?它只能通过蓝牙或 wifi 工作。

以下代码复制自Incorporating Socket Programming into your Applications

public class ServerActivity extends Activity {

    private TextView serverStatus;

    // default ip
    public static String SERVERIP = "10.0.2.15";

    // designate a port
    public static final int SERVERPORT = 8080;

    private Handler handler = new Handler();

    private ServerSocket serverSocket;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.server);
        serverStatus = (TextView) findViewById(R.id.server_status);

        SERVERIP = getLocalIpAddress();

        Thread fst = new Thread(new ServerThread());
        fst.start();
    }

    public class ServerThread implements Runnable {

        public void run() {
            try {
                if (SERVERIP != null) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            serverStatus.setText("Listening on IP: " + SERVERIP);
                        }
                    });
                    serverSocket = new ServerSocket(SERVERPORT);
                    while (true) {
                        // listen for incoming clients
                        Socket client = serverSocket.accept();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                serverStatus.setText("Connected.");
                            }
                        });

                        try {
                            BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                            String line = null;
                            while ((line = in.readLine()) != null) {
                                Log.d("ServerActivity", line);
                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        // do whatever you want to the front end
                                        // this is where you can be creative
                                    }
                                });
                            }
                            break;
                        } catch (Exception e) {
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones.");
                                }
                            });
                            e.printStackTrace();
                        }
                    }
                } else {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            serverStatus.setText("Couldn't detect internet connection.");
                        }
                    });
                }
            } catch (Exception e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        serverStatus.setText("Error");
                    }
                });
                e.printStackTrace();
            }
        }
    }

    // gets the ip address of your phone's network
    private String getLocalIpAddress() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); }
                }
            }
        } catch (SocketException ex) {
            Log.e("ServerActivity", ex.toString());
        }
        return null;
    }

    @Override
    protected void onStop() {
        super.onStop();
        try {
             // make sure you close the socket upon exiting
             serverSocket.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
    }

}

【讨论】:

  • 该页面已不存在。
【解决方案2】:

虽然 p2p 在某些情况下是可能的,但您将获得与客户端-服务器架构最广泛的兼容性,但代价是必须部署、供电、连接和维护服务器。

  • 您将能够使用 wifi 接入点和移动(3g 等)网络
  • 您在系统中有一个现成的位置来衡量(或限制)使用情况和/或插入广告
  • 您不必担心防火墙会阻止与设备的入站连接(在 wifi 上很常见,在移动设备上几乎总是如此)
  • 设备的相对位置无关
  • 您不仅可以与智能手机和平板电脑进行互操作,还可以与传统的 PC 和笔记本电脑进行互操作

【讨论】:

  • p2p 和客户端-服务器的性能如何?哪个性能更好?
  • 如果其中一个想法在需要的情况下不起作用,则性能为零。在两种想法都可行的情况下,您可以同时支持两者。
【解决方案3】:

如果您对Bump 满意,那么他们提供了一个API 供开发人员使用,并且使用起来非常简单。 Check this out.

观看iOS和Android之间传输的现场演示@youtube

详细代码 sn-p 和Github 中的示例。

PS:我不属于 bu.mp :)。

【讨论】:

  • 感谢您的回答。我知道​​ Bump,但我不想使用它。我想弄清楚它是如何工作的。
  • 凹凸不再存在。
【解决方案4】:

我会使用 WebService。这使您的服务更容易维护,因为服务实现独立于您的应用程序。

专业网络服务:

  • 可在预配置的 DNS 下访问
  • 对服务的修改不会影响应用程序(可能的错误修复不需要更新)

对比网络服务:

  • 所有流量都通过您的服务器
  • 应用程序依赖于您的服务器

您应该问自己一个问题,在您的通信中传输了多少数据?使用直接连接有真正的好处吗?

【讨论】:

    【解决方案5】:

    您可以使用filehub在IOS和android之间传输文件。

    市面上有一种叫 fielhub 的新设备,可以在 iOS 和 Android 设备之间,或者移动设备和 SD 卡/USB 硬盘之间传输照片/电影/音乐。我认为它叫做 ravpower filehub。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多