2011-10-10 55 views
2

我想在我的Android手機上使用Restlet框架設置一個Web服務器。我的想法是建立一個遊戲,其中一部手機在地圖上創建一些標記,然後可以使用其他手機直接轉移到其他手機。起初(爲了簡單起見),我想轉讓一個ListObjectsAndroid手機上的Web服務器

在我的電腦上運行服務器似乎工作正常,但是當我將代碼傳輸到我的Android應用程序時,它不會啓動服務器。下面是代碼:

Component serverComponent = new Component(); 
serverComponent.getServers().add(Protocol.HTTP, 80); 
final Router router = new Router(serverComponent.getContext().createChildContext()); 
router.attach("/gamedata", GameDataResourceServer.class); 
serverComponent.getDefaultHost().attach(router); 
serverComponent.start(); 

在執行線serverComponent.start();,拋出此異常:
java.net.BindException: Permission denied (maybe missing INTERNET permission),雖然互聯網的權限是在manifest文件。搜索一些教程也沒有幫助。結果是客戶端應用程序或非常複雜的情況。
有人可以舉一個簡單的應用程序的例子嗎?

+0

所以你想實現一個服務器只能在私人WiFi網絡 - 或者你想啓動一個服務器開放的公共互聯網? – home

+0

私人WiFi只應該做這項工作,但如果可以從公衆訪問,比如說,如果沒有WiFi將數據傳輸到其他電話,則會更好。服務器只需要短時間運行,以允許所有玩家下載數據。 –

回答

4

在Unix類型的環境中,您通常需要root訪問才能綁定到低於1024的TCP端口。您試圖綁定到端口80,除非您以root身份運行此代碼,否則操作系統將阻止該請求。

+0

這意味着我需要選擇1024以上的端口嗎?那麼如何確保在WiFi上運行此端口不會被防火牆阻止? –

+0

是的,你必須使用更高的端口。不保證它不會被路由器阻擋,但如果你想允許來自路由器外部的連接,那真的只是一個問題。如果是這樣的話,你必須讓用戶知道什麼端口正在使用,以便他們可以管理。 – Pedantic

+0

@Alex P .:這就是服務器的工作原理,出於安全原因,在android上運行服務器可能會變得非常具有挑戰性 - 尤其是當您處於不受控制的(未知)環境中時。 – home

相關問題