如何解决SocketException:主机查找失败:'www.xyz.com'(操作系统错误:没有与主机名相关的地址,errno = 7)

时间:2019-02-06 10:19:33

标签: android http dart flutter socketexception

每当我尝试在大约20秒后拨打http呼叫,我都会在控制台中出现以下错误:

E/flutter ( 8274): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 8274): SocketException: Failed host lookup: 'flutter-project-xxxxx.firebaseio.com' (OS Error: No address associated with hostname, errno = 7)

我通过应用程序http包调用的每种方法和每种路线都会发生此错误。

我正在使用Windows Studio中的AVD虚拟设备在Windows上开发Flutter应用。

版本:   http:^ 0.12.0 + 1   颤动:1.0

情况:

  1. 在家中或通过手机进行网络共享: 连接在虚拟设备的每个部分上都能正常工作

  2. 从我的工作网络(位于防火墙之后):

只有使用Android Web View,我才能毫无问题地浏览Internet(我什至可以调用代码中使用的相同URL,并且它可以工作)。 在测试我的应用程序时,在虚拟设备中使用任何其他应用程序(Chrome,Google Play,ecc ...),特别是“ SocketException”时,出现连接错误。

从该应用发出的呼叫之间有什么区别? 有没有一种方法可以路由我的应用程序调用,就像在网络视图中一样?

谢谢!

29 个答案:

答案 0 :(得分:3)

添加 Internet权限不仅是一种解决方案,
还必须确保您在线,无论是移动设备还是模拟器

  
      
  1. 确保您在线(无论是移动设备还是仿真器)
  2.   
  3. 确保您已在应用程序的android / app / src / main / AndroidManifest.xml中授予互联网许可
  4.   

答案 1 :(得分:3)

通过启用WIFI,它对我有用,并确保您还在自动添加的android清单中添加了互联网权限,但必须确保。如果仍然没有,则使缓存无效并重新启动希望它可以工作

答案 2 :(得分:3)

确保您的移动设备或仿真器已连接到互联网

答案 3 :(得分:3)

尝试将<uses-permission android:name="android.permission.INTERNET" />添加到您的AndroidManifest.xml文件中。

答案 4 :(得分:2)

如果您使用的是模拟器,请确保移动数据处于活动状态

答案 5 :(得分:2)

当我在设备上启用wifi时,它工作正常。

答案 6 :(得分:1)

如果在使用flutter_socket_io插件时遇到此错误,请不要忘记初始化套接字,即socketIO.init(); socketIO.connect();,然后再尝试订阅它。省略该错误时,我会收到与上述相同的错误。

答案 7 :(得分:1)

检查是否在gradle设置中启用了脱机工作。 文件->设置->构建->构建工具->离线工作

如果启用或选中了它,则取消选中它。

答案 8 :(得分:1)

  • 确保互联网(手机和PC均已打开)
  • 另外,确保服务器正常运行
  • 正确检查您的URL

答案 9 :(得分:1)

选择AVD Manager,然后选择您的仿真器,在“操作”菜单上单击向下选项符号,然后选择“擦除数据”,然后重新启动仿真器。它对我有用。

答案 10 :(得分:1)

确保您的仿真器或设备已连接到Internet。 如果您的模拟器无法连接到Internet,请使用VPN。

答案 11 :(得分:1)

有时,其他wifi可能会干扰您连接的wifi,这也可能导致此错误。尝试将连接的wifi的频道设置为自动或远离其他wifi的频道。

答案 12 :(得分:0)

就我而言,这是因为我的手机没有连接到互联网

只需启用互联网连接

答案 13 :(得分:0)

我的问题是我使用的是 VPN。当连接到我电脑上的 VPN 时,模拟器无法访问互联网。它可能会帮助某人。

答案 14 :(得分:0)

我特意断开了模拟器 wifi 的连接,看看会发生什么(因为可能会出现没有互联网可用的情况)。该错误将我带到了这里,但是,我所看到的只是解决方法,而不是错误处理。确实,应用应该能够优雅地处理错误并且不会因为缺乏连接而崩溃。

到目前为止,我所做的只是捕捉错误,如果返回码为 -1(或 200 以外的任何值),我知道我遇到了问题,可以让应用做出适当的响应。

var request = new http.MultipartRequest("POST", uri);

// multipart that takes file
var multipartFile = new http.MultipartFile('file', stream, length,
    filename: fileToUpload.path);

// add file to multipart
request.files.add(multipartFile);

// send
try {
  var response = await request.send();
  print(response.statusCode);

  // listen for response
  response.stream.transform(utf8.decoder).listen((value) {
    print(value);
  });

  return response.statusCode;
}
catch (e)
{
  return -1;
}

答案 15 :(得分:0)

正如其他人所说,这绝对是互联网问题。 @petro 和 @Tushar Nikam 的回应让我朝着正确的方向前进。我的模拟器处于飞行模式,但我不知道如何;这是我 90% 的时间都在使用的那个。我建议检查任何可能会阻止互联网连接的东西。

答案 16 :(得分:0)

对我来说,这只是 Flutter 中带有“Uri.https(...)”函数的错误 url。 用浏览器检查地址是否正确

答案 17 :(得分:0)

如果你使用的是 vscode,你会得到 gai_error=0,如果 http 连接成功

这里是放置互联网许可的正确位置,因为知道位置非常具有挑战性

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.appName">
<uses-permission android:name="android.permission.INTERNET" />

在cmd或visual studio code终端上运行flutter run命令

答案 18 :(得分:0)

模拟器上运行应用程序时,我遇到了同样的问题。

我的笔记本电脑通过手机的移动热点连接到了互联网。 但是显然,仿真器无法访问互联网

稍后,我切换到了 Wi-Fi 路由器连接,并且应用程序按预期顺利进行。

我不确定,但是是否要授予任何特殊访问权限?

提示:尝试在模拟器上搜索某些内容以检查Internet连接

答案 19 :(得分:0)

检查您的网址,就我而言,我使用了错误的网址。

答案 20 :(得分:0)

即使我有同样的问题。我重新启动了模拟器,它可以正常工作!

答案 21 :(得分:0)

即使添加后

<uses-permission android:name="android.permission.INTERNET"/>

在您的android / app / src / main / AndroidManifest.xml中,如果您仍然发现问题,则

网站的服务器IP地址可能存在错误,例如:

找不到服务器IP地址

最好等待一段时间,并确保重新启动wifi,它对我有用。

答案 22 :(得分:0)

仔细检查/确保您拥有

<uses-permission android:name="android.permission.INTERNET" /> 在应用程序的android / app / src / main / AndroidManifest.xml中

答案 23 :(得分:0)

此外,最好在模拟器的“扩展控件”中查看“代理设置”。

它对我有用的方法是更改​​为使用“无代理”设置。

enter image description here

答案 24 :(得分:0)

检查wifi是否已连接。我的设备在重新启动wifi后工作。

答案 25 :(得分:0)

该问题基本上是在设备尝试访问任何Internet资源时要解决的,请添加 到AndroidManifest.xml文件@ android / app / src位置。

答案 26 :(得分:0)

有同样的问题。已将uses-permission android:name =“ android.permission.INTERNET”添加到 “ android / app / src / main / AndroidManifest.xml”。仍然无法工作,然后我退出并重新启动模拟器,然后工作了。

答案 27 :(得分:0)

即使在调试模式下,我也遇到该错误(android / app / src / debug / AndroidManifest.xml具有 <uses-permission android:name="android.permission.INTERNET" />

我擦除了数据

C:\Users\username\AppData\Local\Android\Sdk\emulator> .\emulator -avd Nexus_5X_API_28 -wipe-data

然后运行main.dart。

答案 28 :(得分:-2)

翻译:就我而言,计算机具有互联网,但模拟器没有。我在模拟器上配置了连接并解决了该问题。

原件:没有备忘录,estut com互联网公司,emuladornão。配置解决方案。