我需要实时将数据从java应用程序发送到Android应用程序。 数据不大(0和9内的整数),但传输次数很高,大约每秒传输5次。
我希望有一个发布商订阅者模型。 Java应用程序将数据推送到Android应用程序而不是Android应用程序连续ping数据的Java应用程序。
传输必须是实时的,并且将通过LAN发生。
尝试使用GCM但不是实时的。 Pubnub是另一个,但不确定它将是多么实时。
如何进行?
答案 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)
我建议你使用这种方法:
如果您想使用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;
}
}
}
答案 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库并订阅主题。
以下是一些链接: