How to write an Android SocketServer to listen on wifi

跟風遠走 提交于 2019-11-28 04:36:07
Reno

When you create a ServerSocket you listen to a port on the localhost. It's up to you if you want to nominate your own local host address.

Read these two articles:

Remember to have a WiFi lock and the appropriate permissions.

You can try the following code.

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

private String getIPAddress() throws SocketException {

        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = connectivityManager.getActiveNetworkInfo();

        if (info == null || !info.isConnected()){
            return null;
        }

        switch (info.getType()) {
            case ConnectivityManager.TYPE_WIFI: {
                WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                if (wifi == null) break;
                WifiInfo wifi_info = wifi.getConnectionInfo();
                String ipAddress = intToIp(wifi_info.getIpAddress());
                return ipAddress;
            }
            case ConnectivityManager.TYPE_MOBILE: {
                Enumeration<NetworkInterface> interfaceEnumerations =  NetworkInterface.getNetworkInterfaces();
                while(interfaceEnumerations.hasMoreElements()){
                    NetworkInterface interfac = interfaceEnumerations.nextElement();
                    Enumeration<InetAddress> inetAddresses = interfac.getInetAddresses();
                    while(inetAddresses.hasMoreElements()){
                        InetAddress address = inetAddresses.nextElement();
                        if (!address.isLoopbackAddress() && !address.isLinkLocalAddress()) {
                            String addressIp = address.getHostAddress();
                            if(TextUtils.isEmpty(addressIp) || !addressIp.matches("(\\d{1,3}.){3}\\d{1,3}")) continue;
                            return addressIp;
                        }
                    }
                }
                break;
            }
        }

        return null;
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!