Android手机上的Web服务器

问题描述:

我想在我的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将数据传输到其他电话,则会更好。服务器只需要短时间运行,以允许所有玩家下载数据。 –

在Unix类型的环境中,您通常需要root访问才能绑定到低于1024的TCP端口。您试图绑定到端口80,除非您以root身份运行此代码,否则操作系统将阻止该请求。

+0

这意味着我需要选择1024以上的端口吗?那么如何确保在WiFi上运行此端口不会被防火墙阻止? –

+0

是的,你必须使用更高的端口。不保证它不会被路由器阻挡,但如果你想允许来自路由器外部的连接,那真的只是一个问题。如果是这样的话,你必须让用户知道什么端口正在使用,以便他们可以管理。 – Pedantic

+0

@Alex P .:这就是服务器的工作原理,出于安全原因,在android上运行服务器可能会变得非常具有挑战性 - 尤其是当您处于不受控制的(未知)环境中时。 – home