60

我正在尝试在 android 的 expo 应用程序上运行 create-react-native-app。

首先,我通过编写命令创建了项目

创建反应本机应用程序测试

然后我执行了

npm 开始

然后从expo app扫描二维码。

但扫描二维码后,我收到以下错误:

Uncaught Error: Java.net,sockettimeoutException: failed to connect to after 10000ms

在此处输入图像描述

Github问题:

https://github.com/react-community/create-react-native-app/issues/144#issuecomment-296631692

4

35 回答 35

73

这是由于未从您的机器打开端口。

Linux (Ubuntu)

在 Ubuntu 中运行终端

sudo ufw status verbose 要查看打开的端口,如果找不到 19000 端口打开,那么您需要使用打开端口

sudo ufw allow 19000/tcp

然后再次运行

sudo ufw allow 19001/tcp

为了为本地反应提供 http,我使用这种方法在我的 ubuntu 中解决了这个问题。我希望这能帮到您。

视窗

在 Windows 防火墙中打开一个端口以进行 TCP 访问 在“开始”菜单上,单击Run,键入WF.msc,然后单击OK

高级安全 Windows 防火墙左窗格中,右键单击入站规则,然后New Rule在操作窗格中单击。

规则类型对话框中,选择端口,然后单击下一步

在“协议和端口”对话框中,选择TCP。选择Specific local ports,然后输入 React 端口实例的端口号,例如默认实例为19000。单击下一步

在“操作”对话框中,选择“允许连接”,然后单击“下一步”

在“配置文件”对话框中,选择描述要连接到数据库引擎时的计算机连接环境的任何配置文件,然后单击“下一步”

名称对话框中,键入此规则的名称和说明,然后单击完成

同样,您也可以打开端口19001

于 2017-06-17T03:20:46.457 回答
69

我浪费了一整天的时间寻找答案,最后我意外地得到了解决方案。只需将连接从 LAN 更改为隧道

下面是图片,

在此处输入图像描述

于 2019-06-24T16:12:46.447 回答
48

在我的情况下,仅防火墙设置并没有做到这一点。我的问题是 VirtualBox 网络设备具有优先权,而 Expo 主机在错误的网络上启动。

在 Windows 上,您可以运行ipconfig并查看您拥有的网络适配器。npm/yarn start似乎采用了该列表中首先出现的任何内容。

我从这里发现了这一点:https ://github.com/react-community/create-react-native-app/issues/60

如果您不需要列表中的其他网络适配器,您可以在控制面板的网络连接界面中禁用它们。

如果您需要使用这些连接让 Expo 工作,那么为了解决我遵循这个过程的问题:

  1. 转到控制面板 > 网络和 Internet > 网络连接
  2. 右键单击所需的连接(更高优先级的连接)
  3. 单击属性 > Internet 协议版本 4
  4. 单击属性 > 高级
  5. 取消选中“自动指标”
  6. 在“接口度量”中输入 10
  7. 点击确定

对较低优先级的连接重复此操作,但这次将 20 放入“接口度量”

您现在将使用优先级较高的连接作为默认连接。

于 2017-07-19T02:10:47.727 回答
21

您可以通过将笔记本电脑的 IP 地址固定为静态 IP 来解决此问题,例如 192.168.1.69,然后您需要将 react 本机打包程序 IP 地址更改为与笔记本电脑相同的 IP 地址,使用

set REACT_NATIVE_PACKAGER_HOSTNAME=192.168.1.69 (Windows)
REACT_NATIVE_PACKAGER_HOSTNAME=192.168.1.69 (Mac & Linux)

再次开始您的项目,一切顺利。

于 2017-06-21T09:13:19.773 回答
8

在此处输入图像描述

首先,禁用未使用的网络连接。就我而言,它是 VirtualBox。也许它使用相同的端口。我不确定。禁用未使用的连接后,重新启动打包程序。如果你使用 npm 然后输入

npm start
于 2018-01-07T04:42:18.220 回答
8

我已经完成了上下文中提到的所有事情。刚刚将我连接的 WiFi 网络从公共更改为私有。这对我有用

于 2018-08-04T20:58:43.550 回答
4
  • 找到ipv4地址
  • 打开世博会应用程序,然后从底部点击探索按钮
  • 将 exp://[ipv4adress]:19000 写入搜索栏
  • 然后您的应用程序将打开
于 2018-01-12T12:29:04.653 回答
3

在 Windows 中

  1. 运行ipconfig命令提示符

  2. 获取ip4地址并复制。

比去

  1. 这台电脑 > 属性 > 高级系统设置 > 环境变量
  2. 添加以下系统变量:REACT_NATIVE_PACKAGER_HOSTNAME
  3. 作为变量的值,我必须粘贴 ip4。

然后运行npm start ​​It's work for me

于 2018-09-30T13:30:57.090 回答
3

如果您使用 git bash 进行开发,那么 Icruz4 的这个解决方案将有所帮助

代替

set REACT_NATIVE_PACKAGER_HOSTNAME

利用:

export REACT_NATIVE_PACKAGER_HOSTNAME='192.168.1.123'

笔记:

当你跑

npm start

Expo 在输出中告诉您它正在使用的 IP。如果该 IP 不是您想要的 IP,那么

REACT_NATIVE_PACKAGER_HOSTNAME

环境变量设置不正确

于 2018-04-08T11:47:43.420 回答
3

万一有人还在寻找答案。VirtualBox Host-Only Network首先做基本的事情,通过打开网络配置禁用第一个。这对我有用。

于 2019-01-14T09:59:05.687 回答
3

我有同样的问题。问题是命令 yarn start 或 npm start 找到了它找到的第一个启用的网络适配器,它恰好是我(和许多其他机器)上 VirtualBox 的适配器。解决方案是:

手动设置 REACT_NATIVE_PACKAGER_HOSTNAME 环境变量,或禁用 Windows 网络连接中未使用的网络适配器(见图) 问题是 Expo 找到第一个网络适配器,而不是提供 Internet 连接的活动网络适配器。

在此处输入图像描述

于 2018-12-03T04:39:35.100 回答
3

我建议你为 react native 安装 expo 应用程序,这里链接到官方指南

npm install -g exp

然后,您可以使用 Genymotion 软件为您的应用程序模拟不同的环境设置并运行:

exp start

如果您在终端“npm start”中使用本机反应,则以下内容适合您。我发现如果我的应用程序成功运行我的计算机的 IpV 地址,终端中显示的和 Expo 应用程序上的 IPV 地址是相同的,例如:

ipconfig -> IPv4 Address. . . . . . . . . . . : 10.0.0.124
exp://10.0.0.124:19000

基于这一观察,我通过以下方式解决了这个问题:

  1. 关闭正在运行的应用程序的 npm 提示脚本
  2. 关闭世博会应用
  3. 通过在终端中运行命令查找您的 IP:

    ipconfig
    
  4. 使用您的 IP 在 NodeJS 命令提示符下运行命令(例如 10.0.0.124)

    set REACT_NATIVE_PACKAGER_HOSTNAME=10.0.0.124
    
  5. 启动Expo app,扫描条码

    npm start
    

    如果它没有帮助,那么除了其他合理的努力之外,请使用 React 开发人员推荐的后续步骤:

  6. 使用 VirtualBox 安装 Genymotion
  7. 在 Genymotion 网站注册
  8. 运行 Genymotion 软件和 !!!SignIn
于 2018-02-18T05:21:52.530 回答
2

如果您已经尝试了其他答案建议的所有方法,但仍然无法正常工作,请同时检查您的计算机和手机是否连接到同一个 WIFI 网络。对我来说,这是浪费了一个小时。

于 2019-03-14T04:56:35.103 回答
1

我只想为那些只尝试扫描二维码的人记住这一点

第一次启动应用程序时,您需要使用 USB 数据线将手机连接到计算机,这将在您的设备上安装应用程序,然后 expo 扫描将起作用,我认为上述所有解决方案都可以工作,也许只是因为你没有先连接它们一切都不起作用

只需阅读文档 https://reactnative.dev/docs/running-on-device

于 2021-08-22T12:51:41.513 回答
1

就我而言,发生此问题是因为 Expo android 应用程序需要“绘制其他应用程序权限,而我没有给予它。所以我把这个权限给了 Expo 应用程序,问题就解决了..

于 2018-12-29T15:25:04.637 回答
1

我尝试了很多解决方案,只有这样才能帮助我解决这个问题:

在 Windows 中:

  • 转到Windows控制面板中的“网络和连接”(网络和共享中心>更改适配器设置)
  • 禁用您可以在此处看到的所有虚拟框
  • 重启 npm 或者 yarn 或者 expo...
于 2018-10-19T17:31:28.963 回答
1

当我打开 Expo(Android 应用程序)以扫描 QR 码时,我面临同样的问题,在图像中提到完全相同。

解决方案 1:-将(您的 PC 和手机)都连接到同一网络,然后使用 expo 应用程序扫描 QR。

解决方案 2: - 在浏览器的本地主机开发窗口中选择/更改连接类型作为隧道提及,然后使用 expo 应用程序扫描 QR。

我认为这会有所帮助:)

于 2020-07-08T17:28:40.397 回答
1

这个问题可以通过以下方式解决:

在此处使用替代说明设置环境变量

或者

使用此处此处的详细说明为您的网络适配器分配接口矩阵优先级

或者

Ubuntu 机器无法打开端口

进行任何更改后,请重新启动计算机,然后再测试它是否有效。

祝你好运!

于 2018-06-03T11:30:44.667 回答
1

此错误是因为您的端口未打开只是检查端口是否打开对于 ubuntu 您可以使用以下方式检查

sudo ufw status verbose

在此处输入图像描述 检查 19000 端口打开然后你需要它然后如果端口未打开则运行以下命令

 sudo ufw allow 19000/tcp

在此处输入图像描述 对于其他端口运行以下命令

sudo ufw allow 19001/tcp

因为http端口不是你得到错误。上述步骤解决了您的问题,类似于 mac 和 windows 检查防火墙设置一次

于 2020-01-05T09:11:21.260 回答
1

最简单且 100% 可行的解决方案之一是:

  1. 启用您的开发机器(PC 或台式机)的移动热点,并将您的 Android 设备与此热点连接。
  2. 转到控制面板 > 网络和 Internet > 网络连接您将在这里登陆,如图所示:网络连接设置
  3. 然后将本地连接(您的桌面热点)的 IP 地址设置为所需的地址,例如:192.168.1.69,方法是右键单击相关连接,然后单击属性-> Internet 协议版本 4(TCP/IPv4)->属性。然后将此连接的优先级设置为最高,最好在此处进行描述
  4. 然后打开一个命令终端并运行:

    set REACT_NATIVE_PACKAGER_HOSTNAME=192.168.1.69 (Windows)
    REACT_NATIVE_PACKAGER_HOSTNAME=192.168.1.69 (Mac & Linux)
    
  5. 然后通过在您的 expo 项目文件夹中运行npm start重新启动您的 expo 服务器,并通过使用 expo 应用程序扫描生成的 QR 码在您的 Android 设备上运行该应用程序。
于 2019-01-03T20:20:07.487 回答
1

我遇到了同样的问题,但经过一番研究,我发现这是因为您的计算机之前已连接到多个适配器。Expo 可以选择其中之一的 IP 地址。为了避免这种情况

  1. 转到命令提示符并输入“ipconfig”。

  2. 复制无线 LAN 适配器 Wi-Fi 下的 IPv4 地址。

  3. 然后写下面的命令。

set REACT_NATIVE_PACKAGER_HOSTNAME=(Your IP here)
于 2021-02-17T05:45:28.927 回答
0

我找到了适用于 Windows 8 和 10 的解决方案。

官方支持链接 -见这里

当您第一次连接到 Wi-Fi 网络时,您可以将其设置为公共或私有,具体取决于网络和您想要执行的操作:

专用网络。将此用于您信任的网络,例如家庭或工作网络。当网络设置为私有时,网络上的其他设备可以发现您的 PC,并且您可以使用您的 PC 进行文件和打印机共享。

公共网络。将此用于您外出时连接的网络,例如咖啡店的 Wi-Fi 网络。您的 PC 将对网络上的其他设备隐藏,并且您不能使用您的 PC 进行文件和打印机共享。

于 2021-02-07T12:55:53.340 回答
0

您只需要在 Window Firewall 中打开端口,一切就可以正常工作了。

1. 在开始菜单上,单击运行,键入 WF.msc,然后单击确定。

在高级安全 Windows 防火墙的左窗格中,右键单击入站规则,然后在操作窗格中单击新建规则。

在“规则类型”对话框中,选择“端口”,然后单击“下一步”。

在“协议和端口”对话框中,选择 TCP。选择特定本地端口,然后输入 React 端口的实例的端口号,例如默认实例为 19000。点击下一步。

在“操作”对话框中,选择“允许连接”,然后单击“下一步”。

在“配置文件”对话框中,选择任何描述要连接到数据库引擎时的计算机连接环境的配置文件,然后单击“下一步”。

在“名称”对话框中,键入此规则的名称和说明,然后单击“完成”。

同样,您也可以打开端口 19001。

于 2018-12-05T15:06:41.677 回答
0

在 Windows 中,

set REACT_NATIVE_PACKAGER_HOSTNAME=my-ip-address

在我的 git bash 终端中工作,但不是 cmd。在 git bash 中,在我运行 npm start 之后,我得到了一个防火墙弹出窗口,我点击了允许并且它工作了!

于 2018-06-05T01:54:09.227 回答
0

这听起来可能很幼稚。但只是重新启动我的机器解决了这个问题。

于 2020-06-17T15:42:19.280 回答
0

当我取消节点 js 的权限窗口时,我遇到了同样的问题,我通过进入目录解决了这个问题

  1. 在开始菜单上,单击运行,键入 WF.msc,然后单击确定。
  2. 在 Windows 防火墙和高级安全中,在入站规则的左侧面板中,我有两个选项或规则禁用了 Node.js 服务器端 Javascript。

我只需双击并在新窗口中操作,我选择允许连接并保存

于 2021-01-18T14:16:45.993 回答
0

我通过允许端口 19000 和 19001 通过防火墙入站,然后将我的家庭 WiFi 网络更改为私有(如果您在上面的 2 个防火墙规则中允许公共连接,则不需要这样做)。

我只能使用命令提示符执行此操作,而不能使用 WSL2 上的 Ubuntu。如果有人知道如何通过适用于 Linux 的 Windows 子系统执行此操作,请告诉我们。

于 2021-02-09T11:30:25.410 回答
0

在 windows 环境下的 npm start 脚本之后我遇到了同样的问题。将移动设备与我的 Windows 开发环境放在同一网络上已解决问题。

于 2020-07-07T14:52:24.470 回答
0

我通过在我的 ubuntu 系统上使用这个命令得到它:

sudo ufw 允许 19000/tcp

然后输入:

sudo ufw 允许 19001/tcp

重新启动 vscode 和 expo 服务器,然后你就可以开始了!

于 2021-10-07T17:35:38.810 回答
0
  1. 在您的设备中:登录您的 expo 应用程序,如果您没有任何帐户,请创建帐户。
  2. 在您的系统中:打开终端通过 cd 命令转到您的项目目录,然后键入sudo exp start 它会在您完成此操作后询问您的 expo 帐户登录详细信息。
  3. 它会给你二维码扫描。
于 2018-07-19T05:22:51.457 回答
0

更改您的网络设置:

  1. 网络和互联网设置
  2. 地位
  3. 更改连接属性
  4. 选中的公共选项

于 2020-10-09T08:49:03.890 回答
0

如果您已经尝试了所有方法,但仍然无法为您工作。将连接更改为“本地”而不是“局域网”,它对我来说非常有效。这不是最好的解决方案,但确实有效。

于 2020-02-24T05:15:10.007 回答
0

重新安装 Expo go 客户端对我有用。但请确保您已尝试上述解决方案

于 2021-09-29T13:19:43.790 回答
-1

使用 --tunnel 标志启动 EXPO 应该会有所帮助:$ expo start --tunnel

于 2021-02-04T05:50:41.503 回答
-1

Uninstalling McAfee Antivirus and restarting my Laptop fixed this issue. also check if there is any extension or tool added for web browser security. then disabling that will also be a quick fix for this issue.

于 2021-12-22T09:11:04.100 回答