'W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied) in android

Tying push the data from my application to local server.

 public class MainActivity extends AppCompatActivity {
 Socket socket;
 private static final String SERVER_IP = "127.0.0.1";//server ip

 private static final int SERVERPORT = 8000;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
new Thread(new ClientThread()).start();
}
private class ClientThread implements Runnable {
    @Override
    public void run() {

        try {
            InetAddress serverAddr = InetAddress.getByName(SERVER_IP);

            socket = new Socket(serverAddr, SERVERPORT);

        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
}

In the manifest file I have registered below permissions

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

getting below error :

  W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied)
  I/zygote: NativeAllocBackground concurrent copying GC freed 2066(637KB) AllocSpace 
  objects, 0(0B) LOS objects, 73% free, 547KB/2MB, paused 13.469ms total 130.017ms
  W/System.err:     at java.net.Socket.createImpl(Socket.java:487)
  W/System.err:     at java.net.Socket.<init>(Socket.java:441)
  W/System.err:     at java.net.Socket.<init>(Socket.java:248)
  W/System.err:     at com.abc.MainActivity$ClientThread.run(MainActivity.java:85)

Can you please help me to resolve this issue.



Solution 1:[1]

Your app is running on an emulator. If your app uses localhost address 127.0.0.1 it tries to connect to a server also running on that emulator.

If your server is running on the same pc your emulator is running on your app should use ip address 10.0.2.2 instead.

Solution 2:[2]

There's a typo in the manifest: PROmission instead of PERmission!

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

should say

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 blackapps
Solution 2 Denis Kropp