Advertisement
Advertisement


How can I access my localhost from my Android device?


Question

I'm able to access my laptop web server using the Android emulator, I'm using 10.0.2.2:portno works well.

But when I connect my real Android phone, the phone browser can't connect to the same web server on my laptop. The phone is connected to the laptop using a USB cable. If I run the adb devices command, I can see my phone.

What am I missing?

2017/07/03
1
568
7/3/2017 1:55:54 AM

Accepted Answer

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

2020/02/19
423
2/19/2020 8:36:01 AM

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
2019/05/28

Mac OS X users

I achieved this by enabling remote management:

  • Ensure that your phone and laptop are connected to the same WiFi network
  • On Mac, go to System preferences/sharing
  • Enable remote management

You will see a message similar to this:

  • Other users can manage your computer using the address some.url.com

On your Android device, you should now be able to go to some.url.com, which delegates to localhost on your Mac. You can also use ifconfig to get the IP address of your Mac.


Portable solution with ngrok (any OS with Node.js)

If you don't mind exposing your project with a temporary domain you can use ngrok. Lets say I have an app that runs on localhost:9460 I can simply write

npm install ngrok -g

ngrok http 9460

This will give me:

Session Status                online
Update                        update available (version 2.2.8, Ctrl-U to update)
Version                       2.2.3
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://f7c23d14.ngrok.io -> localhost:9460
Forwarding                    https://f7c23d14.ngrok.io -> localhost:9460

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

I can now reach https://f7c23d14.ngrok.io as a way to remotely view localhost. This is great to share design work or progress with clients.


Alternate solution with nginx proxy pass

If you are running something like this through nginx proxy_pass it will require a bit more tweaking - this is a hacky approach, but it works for me and I am open to suggestions on improving it:

  • Enable remote management (as mentioned above)
  • Temporarily set the server to listen on port 81 as opposed to 80
  • Type in the following command:
sudo nginx -s reload
  • Visit http://youripaddress:81
server {
  listen 80;
  listen 81;   # <-------- add this to expose the app on a unique port
  server_name  ~^(local|local\.m).example.com$;
  # ...
}

Reload and visit http://youripaddress:81

2019/05/28

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.


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.

2017/10/17

I found a quick solution to this problem. Try this link. It should help you fix the problem.

I only changed one thing, where the tutorial states you change '127.0.0.1' to 'All', change it to the IP address your server is running on instead.

After that, you should be able to connect to your localhost.


Below is a (proofread) copy of the information from the linked page:

Step 1

Install the Wamp server (or any other you prefer).

This is one of the best servers I know to set up a local server. If you have installed Apache or any other server, ignore this step.

Download and install Wamp Server from here.

Step 2

Add a new rule for port 80 in Windows Firewall.

  1. Open the Control Panel and select Windows Firewall.

  2. Select Advanced settings from the left panel of the Windows Firewall setting page.

  3. Select Inbound Rules from the left panel, then select New Rule.

  4. Select Port and click Next.

  5. Select the “Specific local ports” radio button and enter 80 as the port value.

  6. Keep Allow the connection unchanged and move to the next step.

  7. Keep Profile options unchanged and click Next.

  8. Give some nice name to your new rule and click Finish.

This will enable port 80 access on local network IP.

Step 3

Edit the httpd.conf file of the Wamp server to fix the 403 error.

We need to edit this file. Otherwise, we will get the 403 forbidden error when we access the localhost through a local network IP.

  1. Click on the Wamp server tray icon.

  2. Open Apache server sub menu.

  3. Select httpd.conf.

  4. Find this section of configuration in the httpd.conf file:

    Directory “c:/wamp/www/”
    #
    # Possible values for the Options directive are “None”, “All”,
    # or any combination of:
    # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that “MultiViews” must be named *explicitly* — “Options All”
    # doesn’t give it to you.
    #
    # The Options directive is both complicated and important. Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks
    
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be “All”, “None”, or any combination of the keywords:
    # Options FileInfo AuthConfig Limit
    #
    AllowOverride all
    
    #
    # Controls who can get stuff from this server.
    #
    
    # onlineoffline tag – don’t remove
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    

Find and replace ‘127.0.0.1’ with ‘All’, save the file, and restart your Wamp server.

Step 4

Find your local network IP.

  1. Open the command prompt.

  2. Type and enter the ipconfig command.

  3. In my case, my local area network address is 10.0.0.2.

This is the IP which you need to access your localhost on your Android phone over wifi. To test if it is working, type this IP address in your desktop browser where your localhost server is installed. The browser should display your localhost page successfully. This will assure that this local network IP is now successfully accessible on your Android phone.

I hope this tutorial will help you to access your localhost over wifi.

2017/07/03

On Windows PC You may not need to do anything else than finding out your IPv4 Address using "ipconfig" command.

  • Step 1 : Connect your phone to PC using USB cable.
  • Step 2 : Use command 'ipconfig' to find out your IPv4 Address (External IP of the Router) e.g 192.168.1.5 in my case.
  • Step 3: Just access "192.168.1.5:8080" from your phone browser. It works !

Other Env Details : Windows 7, Google Nexus 4 (4.2.2), Tomcat Server, Grails Application.

You should also make sure that you have the permission to access internet in AndroidManifest file :

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

Source: https://stackoverflow.com/questions/4779963
Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Email: [email protected]