I saw several questions regarding SocketException when using Android, but none of them cover the BindException, which I get even with the INTERNET permission specified in my manifest.
Here is part of my manifest:
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.READ_OWNER_DATA"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCOUNT_MANAGER"></uses-permission> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"></uses-permission>
code>
Here is the relevant part of my LogCat output:
04-22 14: 49: 06.117: DEBUG / MyLibrary (4844): Address to bind: 192.168.1.14 port: 843
04-22 14: 49: 06.197: WARN / System.err (4844): java.net.BindException: Permission denied (maybe missing INTERNET permission)
04-22 14: 49: 06.207: WARN / System.err (4844): at org.apache.harmony.luni.platform.OSNetworkSystem.socketBindImpl (Native Method)
04-22 14: 49: 06.207: WARN / System.err (4844): at org.apache.harmony.luni.platform.OSNetworkSystem.bind (OSNetworkSystem.java:107)
04-22 14: 49: 06.217: WARN / System.err (4844): at org.apache.harmony.luni.net.PlainSocketImpl.bind (PlainSocketImpl.java:184)
04-22 14: 49: 06.217: WARN / System.err (4844): at java.net.ServerSocket.bind (ServerSocket.java:414)
04-22 14: 49: 06.227: WARN / System.err (4844): at org.apache.harmony.nio.internal.ServerSocketChannelImpl $ ServerSocketAdapter.bind (ServerSocketChannelImpl.java:213)
04-22 14: 49: 06.227: WARN / System.err (4844): at java.net.ServerSocket.bind (ServerSocket.java data67)
04-22 14: 49: 06.237: WARN / System.err (4844): at org.apache.harmony.nio.internal.ServerSocketChannelImpl $ ServerSocketAdapter.bind (ServerSocketChannelImpl.java:283)
04-22 14: 49: 06.237: WARN / System.err (4844): at mylibrary.net.PolicyConnection $ PolicyServerWorker. (PolicyConnection.java:201)
I really hope this is a simple problem, not something complicated by the fact that the binding occurs inside the workflow on a port less than 1024.
Update
It seems like this is a privileged port issue, does anyone know how to bind to ports below 1024 in Android?
SelectorProvider provider = SelectorProvider.provider(); try { ServerSocketChannel channel = provider.openServerSocketChannel(); policySocket = channel.socket(); Log.d("MyLibrary", "Address to bind: " + device.getAddress().getAddress() + " port: 843"); InetSocketAddress addr = new InetSocketAddress(InetAddress.getByName(device.getAddress().getAddress()), 843); policySocket.bind(addr); policySocket.setReuseAddress(true); policySocket.setReceiveBufferSize(256); } catch (Exception e) { e.printStackTrace(); }
java android sockets bind
Paul gregoire
source share