简体   繁体   中英

Android Server Socket

I am unable to reach the Android Server on the emulator from a program on my desktop, how do I solve it?

Some code (from How to find LAN ip address of android device? ):

public static ArrayList<String> getSelfIP(){
    try {
        ArrayList<String> ipList = new ArrayList<>();
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    ipList.add(inetAddress.getHostAddress().toString());
                }
            }
        }

        return ipList;
    } catch (SocketException ex) {}
    return null;
}

The result is [fe80::5054:ff:fe12:3456%eth0, 10.0.2.15]

What do I have to configure or do to make the emulator reachable by my desktop programs?

I have done the following:

> adb forward tcp:50000 tcp:50000

However, I am unable to access the server through localhost:50000.

Try using the ip address 10.0.2.2 .

It is the Special alias to your host loopback interface (ie, 127.0.0.1 on your development machine)

Take a look at this Android documentation, Section "Using Network Redirection".

Setting up Redirection through the Emulator Console

Each emulator instance provides a control console the you can connect to, to issue commands that are specific to that instance. You can use the redir console command to set up redirection as needed for an emulator instance.

First, determine the console port number for the target emulator instance. For example, the console port number for the first emulator instance launched is 5554. Next, connect to the console of the target emulator instance, specifying its console port number, as follows:

telnet localhost 5554

Once connected, use the redir command to work with redirection. To add a redirection, use:

add <protocol>:<host-port>:<guest-port>

where <protocol> is either tcp or udp, and <host-port> and <guest-port> sets the mapping between your own machine and the emulated system, respectively.

For example, the following command sets up a redirection that handles all incoming TCP connections to your host (development) machine on 127.0.0.1:5000 and will pass them through to the emulated system's 10.0.2.15:6000:

redir add tcp:5000:6000

In your case the last command would be

redir add tcp:5000:5000

我曾经遇到过这个问题,使用10.0.2.2 IP地址应该可以解决您的问题。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM