如果我像在WinForms应用程序中那样进行操作(是的,我知道这不是一种安全的密码发送方式,我将在以后进行修复):
var req = WebRequest.CreateHttp($"http://localhost:58112/api/login?systemID=1091&login={login}&password={password}");
var resp = (HttpWebResponse)req.GetResponse();
我收到超时错误,大概是因为“ localhost”是指我在其上运行Xamarin的Android虚拟机。那么,如何从Android应用中引用实际的本地计算机呢?我当时在想PC的主机名,但是这取决于谁在运行代码,因此需要在登录页面上作为另一个输入字段...
答案 0 :(得分:1)
您已经发现,localhost / 127.0.0.1表示“此主机”,仅用于与应用程序所在的同一主机进行通信。如果您想通过单独的Android设备与另一台本地计算机对话,这将无济于事。
如果我对您的理解正确,那么您正在尝试向本地网络上的其他服务器发出HTTP Get请求。我不确定在本地发现服务的“神奇方法”,尽管多年来开发了许多协议来尝试克服这一问题,包括许多基于DNS,UDP,多播,Bonjour和以前发现的SOAP服务等。
存在许多在本地发现服务的最佳方法周围的线程(包括专门从Android中发现),这可能会帮助您...
Device discovery in local network
我没有使用过它们,但是通过搜索找到了它们(简单服务发现协议,ZeroConf)...
https://github.com/Yortw/RSSDP
https://github.com/onovotny/Zeroconf
最简单的方法可能是允许用户在运行时提供提示。例如,在首次运行时在简单对话框中或在设置/首选项/配置文件等中要求服务器的IP。我经常将其用于应用程序是为了加快开发速度,以便稍后引入自动发现。课程的YMMV。
HTH
ps。请让我对其他StackOverflow'ers放心,这是我的第一个回复:-)