React Native socket.io on expo未从Android连接[重复]

c6ubokkw  于 2023-08-07  发布在  React
关注(0)|答案(1)|浏览(91)

此问题在此处已有答案

React Native Android Fetch failing on connection to local API(16个回答)
3天前关闭。
在iOS上一切正常,但在Android上无法连接

import { useState, useEffect } from 'react'
import { io } from 'socket.io-client'
const URL = 'http://localhost:8001'
const socket = io(URL)

const useSocket = () => {
  const [isConnected, setIsConnected] = useState(socket.connected)

  useEffect(() => {
    const onConnect = () => setIsConnected(true)
    const onDisconnect = () => setIsConnected(false)
    if (!socket.connected) {
      socket.connect()
    }
    socket.on('connect', onConnect)
    socket.on('disconnect', onDisconnect)

    return () => {
      socket.off('connect', onConnect)
      socket.off('disconnect', onDisconnect)
    }
  }, [])

  return { socket, isConnected }
}

export default useSocket

字符串
最新消息:
如果我换一个
第一个月

const URL = 'http://192.168.1.91:8001'
也就是我在网络上的本地IP
我将不讨论这个问题,因为能够仅使用localhost127.0.0.1而不是特定IP将非常有用

x4shl7ld

x4shl7ld1#

虽然这是一种不同类型的请求,但其背后的解决方案和推理与此问题相同:React Native Android Fetch failing on connection to local API
它在iOS sim上工作,因为作为模拟器,它与主机共享其网络配置。另一方面,Android模拟器是一个独立的设备,具有自己的本地IP,因此localhost告诉您的应用搜索Android的内部网络。
使用主机的完整本地IP地址的解决方案是解决此问题的最简单方法。
出于开发目的,您还可以在构建时使用shell脚本将主机的IP存储在环境变量中。然后你可以使用像react-native-config这样的工具来读取应用中的变量。如果你想知道更多的信息,让我知道。

相关问题