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

时间:2014-06-12 05:21:12

标签: java android activemq publish-subscribe

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

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

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

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

如何进行?

4 个答案:

答案 0 :(得分:4)

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 :(得分:1)

我建议你使用这种方法:

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

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

    1. 您的服务器等待连接,例如在9999港口。
    2. 您的应用程序通过ObjectOutputStream发送同步包,让服务器知道客户想要的信息。
    3. 服务器通过相同的socket发回信息。
    4. 客户端会根据需要多次重复此操作。
    5. 客户端可能如下所示:

      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;
              }
          }
      }
      

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

以下是一些链接:

  1. http://activemq.apache.org/mqtt.html
  2. http://www.eclipse.org/paho/
  3. Basic Steps for Using MQTT in android
  4. 我相信我使用的客户端库来自这里:http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.java.git/