如何使用Socket在两个Android设备之间传输sqlite3数据库?

时间:2012-03-02 11:03:34

标签: android sockets sqlite android-wifi data-transfer

我已经阅读了这篇Bluetooth Chat帖子和这篇Transfer file帖子。我有两个真正的Android设备,而不是AVD,我的 意图是在一个充当客户端的设备中设置IP地址和端口,而另一个设备充当服务器。

他们正在使用WIFI,我已将它们分别连接到PC。获取adb shell,并互相ping。它的工作原理。 我写了这样的客户端代码:

    Socket socket = new Socket("192.168.1.142",8888);

        InputStream in = socket.getInputStream();

        byte[] buffer = new byte[in.available()];

        Toast.makeText(this, String.valueOf(in.available()), Toast.LENGTH_LONG).show();

        in.read(buffer);

        String msg = new String(buffer);

        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();

和服务器:

ServerSocket server = new ServerSocket(8888);
        while(true) {
            Socket client = server.accept();

            OutputStream out = client.getOutputStream();

            String msg = "Hello Android!";

            out.write(msg.getBytes());

            client.close();
        }

我添加了这个

<uses-permission android:name="android.permission.INTERNET" />表示。

但没有回应。我有两个问题:

1.为什么我的客户没有回复?

2.如何处理sqlite3数据库,必须与普通文本文件有所不同,但有什么区别?

任何建议都将非常感谢。

1 个答案:

答案 0 :(得分:3)

在可能与make / model / manufacturer / etc不同的设备之间传输sqlite3 .db是不明智的。相反,您应该将数据库的模式和内容转储到csv或sql并传输它。您可能还想在传输之前压缩文件。

至于与Android的联网。如果您正在使用AVD(模拟器),那么您将无法或几乎无法找到它。您的代理也在网络中发挥作用,因此您需要了解它允许的内容,当前配置的方式以及它的行为方式(错误,怪癖,功能)。您应该使用诸如wireshark之​​类的工具来检查网络通信,并确保您的应用程序甚至发送内容,然后再担心收到的内容是否已收到。