2014-11-24 94 views
0

我正在构建一个连接到我的笔记本电脑后端服务的Android应用程序。它连接到从JSON获取数据的本地主机地址。连接到主机名而不是IP地址在Android应用程序

当我在我的代码中写入笔记本电脑的IP地址时,它可以正常工作。 这个IP地址可以改变,所以我想使用似乎不起作用的主机名。

private static final String URLLocalhost = "http://localhost:8081/"; //不工作
private static final String URLPCName = "http://PCNAME:8081/"; //不起作用
private static final String URLIPAddress = "http://192.168.x.y:8081/"; 需要//作品,但IP修改

@Override 
public List<Spike> getSpikes() { 
    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URLPCName).build(); 

我得到多个ECONNREFUSED错误时,这是​​行不通的。
它不会很快上市,所以我没有这个网址。

我找到了some solutions,但他们需要对我的设备进行更改。 (还没有尝试过)

  • 更改DNS设置
  • 编辑hosts文件

我想任何设备(可能仅限于本地的无线网络),而不必访问此服务更改设备中的设置。

如何从我的代码中使用主机名进行连接?


相关的问题,并没有解决我的问题:How to connect my android app to the remote web server

+0

您是否可以在您连接的网络中使用PCNAME? – Blackbelt 2014-11-24 10:41:51

+0

是的,我可以在同一网络上的其他笔记本电脑上找到它。 – miva2 2014-11-24 10:45:15

+0

和设备连接到相同的网络 – Blackbelt 2014-11-24 10:47:36

回答

1

是,AIUI,这是符合市场预期。 localhost指的是Android设备正在使用的适配器,因此会将请求路由到电话本身(从而失败)。

原始IP可以正常工作,因为它在设备中是明确的。

http://PCNAME:8081/取决于什么样的名字PCNAME在这里,以及你的笔记本电脑正在运行。如果这是一个Windows机器名称(使用WINS),那么默认情况下,Android/Linux无法正常工作。切换到FQDN,例如PCNAME.subdomain.mydomain.org应该可能工作,但这依赖于您的DHCP路由器(或您想避免的Android手动网络设置)在未指定时搜索该域,以及Android尊重该无线路由,我发现它没有(可能是this Android bug)。

可能更容易让这通过构建参数,或者在您的构建中具有用于调试和生产设置的配置文件。另一个简单的解决方法就是使用DHCP预留或仅手动指定IP为笔记本电脑预留静态IP。

+0

我的笔记本电脑确实是一台Windows机器。 – miva2 2014-11-24 10:56:11

+0

好吧,如上所述,您需要在Windows /本地网络设置中对您的DNS进行整理。在设置DNS域之前,您的Windows PCNAME不是有效的(DNS)主机名(http://superuser.com/questions/61827/how-can-i-add-a-search-domain -in-窗口-7)。 另一个选择是任何数量的服务发现协议,以找出_dynamically_你的服务器端点在哪里(例如UPnP的SSDP,Eureka,各种东西),但可能过度杀伤这里。 – declension 2014-11-24 11:25:08

相关问题