How can I access my localhost from my Android device?

USB doesn't provide network to mobile device.

If both your desktop and phone are connected to the same WiFi (or any other local network), then use your desktop IP address assigned by the router (not localhost and not 127.0.0.1).

To find out the IP address of your desktop:

  • type into the command line ipconfig (Windows) or ifconfig (Unix)
    • on Linux the one-liner ifconfig | grep "inet " | grep -v 127.0.0.1 will yield only the important stuff
    • there's a bunch of suggestions on how to have a similar output on Windows
  • there's going to be a bunch of IP's
  • try all of them (except the forementioned localhost and 127.0.0.1)

If your phone is connected to the mobile network, then things are going to be harder.

Either go hardcore:

  • first find out your router external IP address (https://www.google.de/search?q=myip)
  • then, on the router, forward some port to <your desktop IP>:<server port number>
  • finally use the external IP address and forwarded port

Otherwise use something like xip.io or ngrok.

NOTE: The ifconfig command has been deprecated and thus missing by default on Debian Linux, starting from Debian stretch. The new and recommended alternative for examining a network configuration on Debian Linux is ip command. For example to use ip command to display a network configuration run the following:

ip address

The above ip command can be abbreviated to:

ip a

If you still prefer to use ifconfig as part of your daily sys admin routine, you can easily install it as part of the net-tools package.

apt-get install net-tools

Reference is here


It is actually quite simple.

  • Turn on WiFi Hotspot of your Android phone/router and connect your Laptop to your phone
  • Start your server at localhost (I am using WAMP server for Windows)
  • Now open the command prompt and enter
ipconfig

Once you've done that, you will see something like the following:

Wireless LAN adapter Wireless Network Connection:
  Connection-specific DNS Suffix  . :
  Link-local IPv6 Address . . . . . : fe80::80bc:e378:19ab:e448%11
  IPv4 Address. . . . . . . . . . . : 192.168.43.76
  Subnet Mask . . . . . . . . . . . : 255.255.255.0
  Default Gateway . . . . . . . . . : 192.168.43.1
  • Copy the IPv4 Address (in this case, it is 192.168.43.76)
  • In your mobile browser, simply paste the IPv4 Address

Note: Please set your network as "Home Network". Setting the network as Home Network means that you are allowing your PC to share stuff with other devices on the same network.

If you are using Windows 10, this can be done with the following:

  • Open Settings
  • Go to Network & Internet
  • Select WiFi in the left menu
  • Tap on the name of the connected WiFi
  • Set the Network Profile of the network to be Private

If you are having an issue, it is most likely to do with Windows Firewall.

  • Open Control Panel
  • Go to Windows Defender Firewall
  • Tap on Allow an app or feature through Windows Defender Firewall
  • Check whether the app is enabled for Private networks (there should be a tick)
  • If it is not enabled, tap Change settings and tick the checkbox under Private for the app

With the simple solution (just access laptop_ip_addr:port from mobile device, when mobile and laptop are on the same WiFi), I get a ERR_CONNECTION_REFUSED error. That is, my MacBook seems to refuse the connection attempt from my mobile.


ADB Reverse Socket (Android only)

This solution works for me (tested with a MacBook):

  1. Connect Android mobile device with USB cable to laptop
  2. Enable USB Debugging on mobile device
  3. On laptop, run adb reverse tcp:4000 tcp:4000
    • Use your custom port number instead of 4000
  4. Now, on the mobile device, you can navigate to http://localhost:4000/, and it will actually connect to the laptop, not the mobile device

See instructions here.

The downside is that this works only with a single mobile device at a time. If you want access with another mobile device, you have to first disconnect the first one (disable USB Debugging), connect the new one (enable USB Debugging), and run adb reverse tcp:4000 tcp:4000 again.

EDIT: this solution has been reported to also work with Windows.


ngrok (works with all devices)

Another solution that should always work is ngrok (as mentioned in other answers). It works over the Internet, and not the local network.

It's extremely easy to use:

brew cask install ngrok
ngrok http 4000

This outputs, among some other information, a line like

Forwarding                    http://4cc5ac02.ngrok.io -> localhost:4000

Now, you can navigate to http://4cc5ac02.ngrok.io on any device that is connected to the Internet, and this URL redirects to localhost:4000 of your laptop.

Note that as long as the ngrok command is running (until you hit Ctrl-C), your project is publicly served. Everybody who has the URL can see it.