如何保持连接以便在没有请求的情况下向远程客户端发送实时数据

时间:2013-04-10 16:55:10

标签: sockets networking binding portforwarding

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

我认为从服务器接收数据的事实应该由客户端(Android应用程序)启动,因为其他工作不正常或者它将被阻止。 *是否有解决方案从外部实时接收数据(温度)只是请求一次或我应该发送像evrey分钟的请求? * 我很困惑,因为某些应用程序(如视频流)仅通过启动视频播放器从服务器接收数据,然后自动接收udp数据包

我可以通过发送一次请求(也许通过让套接字为每个客户端打开,VPN,SIP)将数据从服务器发送到远程客户端更加谨慎?

2 个答案:

答案 0 :(得分:1)

向远程客户端发送数据:安全地&可靠地

只有一种合理可靠的方法可以向远程客户端发送signal。我想确认你没有请求发送给客户端的原始假设,这在理论上是不可能的,因为设备需要在某处调用home并通知代理网关(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);
    }
});

答案 1 :(得分:0)

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

相关问题