代码之家  ›  专栏  ›  技术社区  ›  Rahul Mahadik

http请求在模拟或在真实设备模式下运行时不进行处理,但在emulator中可以正常工作

  •  0
  • Rahul Mahadik  · 技术社区  · 7 年前

    在我的flatter应用程序中,我有一个用户注册表单,它使用http请求将数据发送到服务器。

    仿真器 (API 27和安卓8.1版)工作正常,但 真正的安卓设备 它给出了一个错误 本地服务器 服务器

    SocketException: OS Error: Connection refused, errno = 111, address = 127.0.0.1, port = 48134

    我正在使用7.1版的Android设备

    代码:

    final JsonDecoder _decoder = new JsonDecoder();
    
      Future<dynamic> post() {
        return http.post(
          "http://192.168.31.16:9091/myprj/api/register",
          body: json.encode({
            "username": "rahul",
            "password": "rahul",
            "email": "myemail@gmail.com",
          }),
          headers: {"Accept": "application/json","Content-type": "application/json",},
        ).then((http.Response response) {
          final String res = response.body;
          final int statusCode = response.statusCode;
    
          if (statusCode < 200 || statusCode > 400 || json == null) {
            throw new Exception("Error while fetching data");
          }
          return _decoder.convert(res);
        });
      }
    

    其中,我使用了本地网络IP 192.168.31.16 localhost . 当我使用live server address时,使用android设备也可以正常工作。问题只存在于带有真实android设备的localhost http请求服务器。

    希望你能理解我的问题。

    2 回复  |  直到 7 年前
        1
  •  3
  •   rmtmckenzie    7 年前

    这很可能与您运行服务器的方式有关,因为只要您输入了正确的IP地址,并且您的设备连接到同一网络,这似乎是正确的。

    有一件事曾经让我大吃一惊,那就是如果你在“localhost”或“127.0.0.1”上运行你的服务器,它可能实际上并没有像你想象的那样运行。它们都应该托管在本地重定向中,该重定向只允许从您自己的计算机进行访问。仿真器很可能设置了一些东西,因此它的行为就像连接到本地主机一样。

    我建议在您的服务器上添加一个虚拟端点(比如/healthz),它只返回一个html或纯文本页面,上面写着“Itworks”之类的内容。然后打开手机的web浏览器并转到那里。如果它能工作,你就知道你的手机能够与电脑通信,然后我们就可以开始研究编码问题了。如果它不起作用,您知道这与服务器的配置有关。

        2
  •  1
  •   Rahul Mahadik    7 年前

    我的防火墙有问题。它阻塞了我的端口9090。