繁体   English   中英

将实时数据从java发送到android应用程序

[英]Send real time data from java to android application

我需要实时将数据从java应用程序发送到Android应用程序。 数据不大(0和9内的整数),但传输次数很高,大约每秒传输5次。

我希望有一个发布者订阅者模型。 Java应用程序将数据推送到Android应用程序,而不是Android应用程序连续ping数据的Java应用程序。

传输必须是实时的,并且将通过LAN发生。

尝试用GCM但不是实时的。 Pubnub是另一个,但不确定它将是多么实时。

如何进行 ?

PubNub就像实时一样......并且让Java服务器与Android设备对话非常容易(实际上,PubNub有超过50种不同平台的客户端SDK!)。

这个相同的代码将在Android和普通Java上运行:

import com.pubnub.api.*;
import org.json.*;

Pubnub pubnub = new Pubnub("demo", "demo");

Callback callback = new Callback() {
  public void successCallback(String channel, Object response) {
      Log.d("PUBNUB",response.toString());
  }
  public void errorCallback(String channel, PubnubError error) {
      Log.d("PUBNUB",error.toString());
  }
};

try {
  pubnub.subscribe("demo", callback);
    } catch (PubnubException e) {
  Log.d("PUBNUB",e.toString());
}

pubnub.publish("demo", "Hello World !!" , callback);

完整的演练可在此处获得:

http://www.pubnub.com/docs/java/javase/tutorial/data-push.html

如果您对此有其他疑问,请随时联系support@pubnub.com,他们将很乐意为您提供进一步的帮助。

geremy

我建议你使用这种方法:

  1. 制作服务于应用程序的服务器脚本,您可以使用PHP。 这是首选方法,但您可以坚持使用java服务器。
  2. 让您的服务器侦听指定的端口(如果您选择了Java),或者只在您使用HTTP版本时启动Web服务器。
  3. 你的应用程序是谁应该开始沟通,而不是相反。

如果您想使用HTTP服务器,则必须了解JSON或任何AJAX技术。

如果你坚持使用java服务器,你可能想要实现这样的东西:

  1. 您的服务器等待连接,例如在端口9999上。
  2. 您的应用程序通过ObjectOutputStream发送同步包,以使服务器知道客户端想要的信息。
  3. 服务器通过同一个socket发回信息。
  4. 客户端根据需要重复多次。

客户端可能如下所示:

public class Client {
    public void retrieveData() {
        ResponseObject response = null;
        try {
            Socket socket = new Socket("host", 9999);
            ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );
            oos.writeObject(criterio);
            oos.close();
            ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );
            Response response = (Response) ois.readObject();
            socket.close();
        } catch (IOException e) {
            System.out.println("Error: "+e.getMessage());
        }
        System.out.println("Response was: "response.toString());
    }
}

和这样的服务器:

public class Server {
    public void startServer() {
        ServerSocket serverSocket = new ServerSocket(9999);
        ExecutorService service = Executors.newFixedThreadPool(MAX_THREADS);

        while (true) {
            try {
                servicio.submit(new Receiver(serverSocket.accept()));
            } catch (IOException e) {
                System.out.println("Error: "+e.getMessage());
            }
        }

        serverSocket.close();
    }

    public class Receiver implements Callable<Object> {
        Socket socket;

        Receiver(Socket socket) {
            this.socket = socket;
        }

        public Object call() {
            ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );
            Object clientData = ois.readObject();
            ois.close();

            ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );
            oos.writeObject(...); /* Your response goes here */
            oos.close();

            socket.close();
            return null;
        }
    }
}

如果您正在将数据从java传输到局域网中的Android应用程序,那么您可以使用TCp / UDP在Java和Android应用程序之间进行实时数据传输。 在我的一个项目中,我处于相同的情况,但我想将字符串从Android应用程序传输到pc中的java应用程序。 在局域网中我使用TCP。 java app正在侦听tcp连接,当android app发送请求到java app进行连接时,数据也被转移。

您可以将此方案用于您的问题

查看MQTT。 我用它从ActiveMQ到Android。 我的Android应用程序使用连接到ActiveMQ并订阅主题的MQTT库。

以下是一些链接:

  1. http://activemq.apache.org/mqtt.html
  2. http://www.eclipse.org/paho/
  3. 在android中使用MQTT的基本步骤

我相信我使用的客户端库来自这里: http//git.eclipse.org/c/paho/org.eclipse.paho.mqtt.java.git/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM