[英]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
我建议你使用这种方法:
如果您想使用HTTP服务器,则必须了解JSON或任何AJAX技术。
如果你坚持使用java服务器,你可能想要实现这样的东西:
ObjectOutputStream
发送同步包,以使服务器知道客户端想要的信息。 socket
发回信息。 客户端可能如下所示:
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库。
以下是一些链接:
我相信我使用的客户端库来自这里: http : //git.eclipse.org/c/paho/org.eclipse.paho.mqtt.java.git/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.