/ / SocketException: EACCESS (в дозволі відмовлено) - java, android, sockets, permissions

SocketException: EACCESS (Відмова від дозволу) - java, android, sockets, дозволи

Я намагаюся створити сокет в Android, але я продовжую отримувати помилки EACCESS (в дозволі відмовлено).

Ось мій код у окремо нитка з потоку інтерфейсу користувача.

public class Client implements Runnable {
private final static String SERVER_ADDRESS = "173.246.12.125";

@Override
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(SERVER_ADDRESS);
DatagramSocket socket = new DatagramSocket();
...

Мої дозволи на андроїд включають:

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

і саме через деякі відповіді stackoverflow я також додав це:

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

але я все одно не можу створити розетку.

Що я пропускаю? Помилка виводу:

 java.net.SocketException: socket failed: EACCES (Permission denied)
at libcore.io.IoBridge.socket(IoBridge.java:623)
at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:93)
at java.net.DatagramSocket.createSocket(DatagramSocket.java:157)
at java.net.DatagramSocket.<init>(DatagramSocket.java:80)
at java.net.DatagramSocket.<init>(DatagramSocket.java:65)
...

Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
at libcore.io.Posix.socket(Native Method)
at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
at libcore.io.IoBridge.socket(IoBridge.java:608)
at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:93)
at java.net.DatagramSocket.createSocket(DatagramSocket.java:157)
at java.net.DatagramSocket.<init>(DatagramSocket.java:80)
at java.net.DatagramSocket.<init>(DatagramSocket.java:65)
at com.austinfathman.traffic_server.Client.run(UDP.java:73)
at java.lang.Thread.run(Thread.java:818)

Відповіді:

-2 для відповіді № 1

Я отримував подібну помилку. Виявляється, якщо ви спробуєте прив’язатись до порту, який використовується, це не спрацює.

DatagramSocket socket = new DatagramSocket(3996);

Це працювало для мене.