How to write Android SocketServer to listen on Wi-Fi

I wrote a stream using java.net.SocketServer to listen on a specific port. It works great in an Android simulator (using port forwarding). I plan to connect Wi-Fi to this port when the application is in use. However, the SocketServer documentation says that if you do not supply InetAddress , the server listens on the local host.

Is it correct if I do not provide an address, I can not connect to Wi-Fi? How can I get InetAddress Wi-Fi connection to SocketServer ?

+6
android sockets wifi
source share
2 answers

When creating a ServerSocket, you are listening on a port on the local host. It is up to you if you want to assign your own local host address .

Read these two articles:

Remember that there is a WiFi lock and corresponding permissions.

+17
source share

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; } 
0
source share

All Articles