2009-08-06 99 views
3

Web服務器可以一個J2ME應用程序通過從遠程Web服務器的消息來觸發。我希望在其上運行的J2ME應用程序收到此消息後立即在客戶端手機上執行任務。 我已閱讀過HTTP連接,但是我瞭解的是基於客戶端的協議,服務器只會回覆客戶端請求。 任何想法,如果有任何協議的服務器可以發送命令給客戶端沒有客戶端發起任何請求?基於Socket/Stream的(TCP)或UDP接口如何?發送命令到J2ME應用

+1

我有一個類似的問題在這裏運行。 http://stackoverflow.com/questions/1240503/what-tcp-protocols-are-usable-for-client-to-client-communication可能在回答時會以某種方式提供幫助。 – 2009-08-06 18:05:51

回答

3

如果移動設備犯規讓你做出的TCP連接,和你是有限的HTTP請求,那麼你正在尋求實現「長輪詢」。

一個POST HTTP請求和web服務器將等待長的時間儘可能(以前的事情超時)來回答。如果在連接閒置時有東西到達,它可以直接接收它,如果長輪詢請求之間到達,它將排隊,直到有請求進入。

如果您可以建立TCP連接,那麼只需建立一個連接並讓它保持閒置。我有icq和irc應用程序,基本上就是坐在那裏等待服務器發送一些東西。

+0

我讀過除了HTTP之外,MIDP2.0還支持TCP/UDP連接。 並與TCP我們會嘗試打開使用 Connector.open(「套接字:// IP:端口」)與服務器的連接,其中IP:端口分別服務器是IP地址和端口。 如果嘗試使用此代碼,則不會與端口80上的服務器形成連接。該端口不允許未知連接。 任何想法! – 2009-08-07 08:12:55

+0

事實上,錯誤消息說「目標端口被拒絕給不信任的應用程序」我不知道如何克服這個錯誤 – 2009-08-07 08:48:28

2

您應該看到PushRegistry功能,您可以發送短信到特定號碼有當手機收到短信,然後進行所需的HTTP連接或任何應用程序啓動。然而,它的缺點是您可能需要簽署應用程序才能使其在設備上工作,並且您還需要SMS集合器,如SMSLibKannel

+0

我已經進入PushRegistry功能,並且SMS是其中一個選項,但是如果套接字或HTTP連接可以滿足要求寧願朝這個方向前進。似乎pushregistry也支持網絡連接,我只是想玩這些,直到我接近我的選擇。 – 2009-08-07 09:07:32

1

套接字推送由j2me支持。但它只有在您的服務器可以將數據傳送到您的手機時才能工作。運營商網關最可能不允許這樣做。 也許這可能是如果你的手機有靜態的外部IP地址 - 一些運營商可以提供這個$$。

+0

我認爲在閱讀所有答案後,HTTP連接和長輪詢是要走的路,在套接字推送方面存在很多不明確之處,我不知道有多少服務提供商允許入站連接到手機,可能會阻止他們。 我希望我被證明是錯誤的更好的答案。 – 2009-08-08 08:59:07

2

您可以在您的應用程序打開套接字連接,並實現「隱藏」(或「最小化」)的功能。調用這個隱藏:

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

聽在一個循環的服務器,如果你收到一些消息,通過調用這個從畫布上彈出廣告應用程式:

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

但是這麼想的工作在所有設備。

+0

根據您以前的文章,套接字連接不被所有手機isp支持,並且它們可能會阻止到手機的傳入連接。如何打開HTTP連接,但頻繁輪詢服務器可能會在用戶的口袋上沉重,因爲GPRS計費是基於流量的,任何出路都不行。 – 2009-08-08 10:19:43

+1

不,套接字連接被支持,PushRegistry不使用套接字,因爲在這種情況下,服務器需要將數據直接推送到移動設備。
但是,當你打開套接字連接和*保持打開*,一切都應該正常工作 - 我已經嘗試過自己,並且一些應用程序(如GM2 for j2me)使用它。 – 2009-08-09 09:45:51