1

我正在开发一个移动项目,可以控制一个家庭,从房子内部或外部接收信息。如果我从外部使用我的应用程序,我会在我的路由器上设置端口转发机制以连接到我的服务器。

我认为从服务器接收数据的事实应该由客户端(android 应用程序)女巫发起,否则它将被阻止。 * 有没有一种解决方案,只需请求一次就可以从外部实时接收数据(温度),或者我应该发送一个像 evrey minute 这样的请求?*我很困惑,因为像视频流这样的一些应用程序只需启动视频播放器就可以从服务器接收数据,然后它会自动接收 udp 数据包

更具体地说,我可以通过只发送一次请求(也许通过让每个客户端、VPN、SIP 打开套接字)来将数据从服务器发送到远程客户端吗?

4

2 回答 2

1

向远方客户发送数据:安全可靠

只有一种合理可靠的方法可以将 a 发送signal给远方的客户。我想确认您最初的假设,即在没有请求的情况下向客户端发送,这在理论上是不可能的,因为设备需要在某个地方打电话并通知代理网关 (SIP) 或其他地址。但是请忽略这一点,因为正确的方法将在这里与源代码一起传递。

安全重要性

重要的是要意识到打开防火墙超出了良好做法。最好遵守防火墙的入站流量锁定规则。以下部分是一种安全方法,可让您以最大的安全性打开出站连接,以防止窥探和其他不安全的安全漏洞。

下载 Android 源库

请参阅此处下载 Android 源库文件的说明:https ://github.com/pubnub/java/tree/master/android

在 Android 上从远处按需接收数据

您需要复制/粘贴以下代码才能快速推进。首先获取此 Java 代码并将其粘贴到您的应用程序中。然后下载库文件。

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// ANDROID PHONE
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Pubnub pubnub = new Pubnub(
    "",      // PUBLISH_KEY   (Optional, supply "" to disable)
    "demo",  // SUBSCRIBE_KEY (REQUIRED)
    "",      // SECRET_KEY    (Optional, supply "" to disable)
    "",      // CIPHER_KEY    (Optional, supply "" to disable)
    true     // SSL_ON?
);
Hashtable args = new Hashtable(1);
args.put( "channel", "distant-client-ABC-DEF" );
pubnub.subscribe(args, new Callback() {
    public void connectCallback(String channel) {
        System.out.println("CONNECT on channel:" + channel);
    }

    public void disconnectCallback(String channel) {
        System.out.println("DISCONNECT on channel:" + channel);
    }

    public void reconnectCallback(String channel) {
        System.out.println("RECONNECT on channel:" + channel);
    }

    public void successCallback(String channel, Object message) {
        System.out.println(channel + " " + message.toString());
    }

    public void errorCallback(String channel, Object message) {
        System.out.println(channel + " " + message.toString());
    }
});

按需向远程客户端发送数据

在您的家庭计算机/系统上的 Java VM 上,您可以使用相同的代码将数据安全地发送到远程客户端。使用以下代码执行此操作:

下载 JVM 服务器源库

请参阅此处下载/使用 JVM 服务器源库文件的说明:https ://github.com/pubnub/java/tree/master/java

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// HOME SERVER
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Pubnub pubnub = new Pubnub(
    "demo",  // PUBLISH_KEY   (REQUIRED on Server)
    "demo",  // SUBSCRIBE_KEY (REQUIRED)
    "",      // SECRET_KEY    (Optional, supply "" to disable)
    "",      // CIPHER_KEY    (Optional, supply "" to disable)
    true     // SSL_ON?
);

Hashtable args = new Hashtable(1);
args.put( "channel", "distant-client-ABC-DEF" ); // SEND TO CLIENT ABC-DEF
pubnub.publish(args, new Callback() {
    public void successCallback(String channel, Object message) {
        System.out.println("PUBLISH : " + message);
    }
    public void errorCallback(String channel, Object message) {
        System.out.println("PUBLISH : " + message);
    }
});
于 2013-04-16T17:33:26.780 回答
0

我不喜欢 Android 世界,但它不是您正在寻找的服务吗?:http: //developer.android.com/google/gcm/index.html

于 2013-04-10T16:59:48.603 回答