How to bind a socket to local wifi network address on Android?
up vote
2
down vote
favorite
I want to bind a socket to local wifi network address to make sure that requests are not running through 3g or other networks. I tried this code:
public static String getIpAddress(WifiManager wifiManager)
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
return String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));
Socket socket = new Socket();
String localIpAddress = getIpAddress(wifiManager);
socket.bind(new InetSocketAddress(localIpAddress, 80));
socket.connect(new InetSocketAddress(serverHostname, serverPort), (int) timeoutMs);
And it throws:java.net.BindException: bind failed: EACCES (Permission denied)
I checked permissions in Manifest. Looks like all needed permissions are granted:
<!-- Uses: show 'disconnected' message when not connected to the internet -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Uses: record wifi network name when setting up a device -->
<!-- Uses: device wifi setup -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- Uses: device wifi setup -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
java android sockets
add a comment |
up vote
2
down vote
favorite
I want to bind a socket to local wifi network address to make sure that requests are not running through 3g or other networks. I tried this code:
public static String getIpAddress(WifiManager wifiManager)
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
return String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));
Socket socket = new Socket();
String localIpAddress = getIpAddress(wifiManager);
socket.bind(new InetSocketAddress(localIpAddress, 80));
socket.connect(new InetSocketAddress(serverHostname, serverPort), (int) timeoutMs);
And it throws:java.net.BindException: bind failed: EACCES (Permission denied)
I checked permissions in Manifest. Looks like all needed permissions are granted:
<!-- Uses: show 'disconnected' message when not connected to the internet -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Uses: record wifi network name when setting up a device -->
<!-- Uses: device wifi setup -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- Uses: device wifi setup -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
java android sockets
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I want to bind a socket to local wifi network address to make sure that requests are not running through 3g or other networks. I tried this code:
public static String getIpAddress(WifiManager wifiManager)
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
return String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));
Socket socket = new Socket();
String localIpAddress = getIpAddress(wifiManager);
socket.bind(new InetSocketAddress(localIpAddress, 80));
socket.connect(new InetSocketAddress(serverHostname, serverPort), (int) timeoutMs);
And it throws:java.net.BindException: bind failed: EACCES (Permission denied)
I checked permissions in Manifest. Looks like all needed permissions are granted:
<!-- Uses: show 'disconnected' message when not connected to the internet -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Uses: record wifi network name when setting up a device -->
<!-- Uses: device wifi setup -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- Uses: device wifi setup -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
java android sockets
I want to bind a socket to local wifi network address to make sure that requests are not running through 3g or other networks. I tried this code:
public static String getIpAddress(WifiManager wifiManager)
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
return String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));
Socket socket = new Socket();
String localIpAddress = getIpAddress(wifiManager);
socket.bind(new InetSocketAddress(localIpAddress, 80));
socket.connect(new InetSocketAddress(serverHostname, serverPort), (int) timeoutMs);
And it throws:java.net.BindException: bind failed: EACCES (Permission denied)
I checked permissions in Manifest. Looks like all needed permissions are granted:
<!-- Uses: show 'disconnected' message when not connected to the internet -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Uses: record wifi network name when setting up a device -->
<!-- Uses: device wifi setup -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- Uses: device wifi setup -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
java android sockets
java android sockets
asked Jul 5 '16 at 19:41
Semyon Tikhonenko
91111441
91111441
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
You cannot bind to ports below 1024 without superuser access. So the Socket.bind()
to port 80 is what is throwing an exception. Pick a custom port which is above 1024. For example, most user started web servers use port 8080.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
You cannot bind to ports below 1024 without superuser access. So the Socket.bind()
to port 80 is what is throwing an exception. Pick a custom port which is above 1024. For example, most user started web servers use port 8080.
add a comment |
up vote
2
down vote
accepted
You cannot bind to ports below 1024 without superuser access. So the Socket.bind()
to port 80 is what is throwing an exception. Pick a custom port which is above 1024. For example, most user started web servers use port 8080.
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
You cannot bind to ports below 1024 without superuser access. So the Socket.bind()
to port 80 is what is throwing an exception. Pick a custom port which is above 1024. For example, most user started web servers use port 8080.
You cannot bind to ports below 1024 without superuser access. So the Socket.bind()
to port 80 is what is throwing an exception. Pick a custom port which is above 1024. For example, most user started web servers use port 8080.
answered Jul 5 '16 at 19:51
Larry Schiefer
13.4k11829
13.4k11829
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f38211440%2fhow-to-bind-a-socket-to-local-wifi-network-address-on-android%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password