【问题标题】:web server sending command to a J2ME appWeb 服务器向 J2ME 应用程序发送命令
【发布时间】:2009-08-08 17:41:57
【问题描述】:

J2ME 应用程序能否由来自远程 Web 服务器的消息触发。我想在客户端手机上运行的 J2ME 应用程序收到此消息后立即在客户端手机上执行任务。 我读过 HTTP 连接,但是我理解的是基于客户端的协议,服务器只会回复客户端请求。 知道是否有任何协议可以使服务器无需客户端发起任何请求就可以向客户端发送命令吗?基于 Socket/Stream 的 (TCP) 或 UDP 接口怎么样?

【问题讨论】:

标签: java http java-me mobile sockets


【解决方案1】:

如果移动设备不允许您建立 TCP 连接,并且您仅限于 HTTP 请求,那么您正在考虑实施“长轮询”。

一个 POST http 请求,网络服务器将等待尽可能长的时间(在超时之前)来回答。如果在连接空闲时有东西到达,它可以直接接收它,如果在长轮询请求之间有东西到达,它会排队,直到有请求进来。

如果您可以建立 TCP 连接,那么只需建立一个连接并让它保持空闲状态。我有 icq 和 irc 应用程序,它们基本上只是坐在那里等待服务器发送一些东西。

【讨论】:

  • 我听说 MIDP2.0 除了 HTTP 之外还支持 TCP/UDP 连接。使用 tcp 我们将尝试使用 Connector.open("socket://ip:port") 打开与服务器的连接,其中 ip:port 分别是服务器的 IP 地址和端口。如果尝试此代码,但未在端口 80 与服务器建立连接。它说端口不允许未知连接。任何想法!
  • 实际上错误消息说“目标端口拒绝不受信任的应用程序”我不知道如何克服这个错误
【解决方案2】:

您应该会看到 PushRegistry 功能,您可以在其中向特定号码发送 SMS,并在手机收到该 SMS 时启动应用程序,然后建立所需的 HTTP 连接或其他方式。但是,它的缺点是您可能必须签署应用程序才能使其在设备上运行,并且您还需要像 SMSLibKannel 这样的 SMS 聚合器

【讨论】:

  • 我已经使用了 PushRegistry 功能,并且 SMS 是其中一种选择,但是如果套接字或 HTTP 连接就足够了,我宁愿朝那个方向前进。似乎 pushregistry 也支持网络连接,我只想玩这些,直到我关闭我的选项。
【解决方案3】:

您可以在您的应用中打开套接字连接并实现“隐藏”(或“最小化”)功能。调用它来隐藏:

Display.getDisplay(MyMIDlet.instance).setCurrent(null);

在循环中监听服务器,如果你收到一些消息,通过从画布调用这个来弹出应用程序:

Display.getDisplay(MyMIDlet.instance).setCurrent(this);

但它并不适用于所有设备。

【讨论】:

  • 根据您之前的帖子,并非所有电话 isp 都支持套接字连接,它们可能会阻止与电话的传入连接。打开一个 HTTP 连接怎么样,但是频繁地轮询服务器可能会给用户带来沉重的负担,因为 GPRS 计费是基于流量的,无论如何。
  • 否,支持套接字连接,PushRegistry 不使用套接字,因为在这种情况下服务器需要将数据直接推送到移动设备。
    但是,当您打开套接字连接并让它保持打开状态 时,一切都应该正常工作 - 我自己尝试过,并且一些应用程序(如用于 j2me 的 GMail)使用它。
【解决方案4】:

j2me 支持套接字推送。但只有当您的服务器可以将数据传送到您的手机时,它才能工作。运营商网关很可能不允许这样做。 如果您的手机有静态外部 IP 地址,也许这是可能的 - 一些运营商可以以 $$ 的价格提供。

【讨论】:

  • 我认为在阅读所有答案后,HTTP 连接和长轮询是要走的路,套接字推送有很多歧义,我不知道有多少服务提供商允许入站连接到手机可能他们阻止了他们。我希望有一个更好的答案证明我错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 2019-01-15
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多