Android java.net.Exception socketexception:socket a échoué: EACCES (Permission denied)
Salut les gars je suis d'une application android mais lorsque je le lance j'ai une erreur dans ma console. Je suis en utilisant un socket Datagramme pour créer une connexion et je suis à l'aide de 2 classes: MainActivity
(c'est l'activité principale de l'application) et UdpClientServer
pour créer la connexion.
Ici le code MainActivity:
public class MainActivity extends Activity {
private UdpClientServer cu;
private EditText textIpScheda;
private EditText textUdpPort;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textIpScheda = (EditText) findViewById(R.id.textIpScheda);
textUdpPort = (EditText) findViewById(R.id.textUdpPort);
try {
cu = new UdpClientServer(this);
} catch (IOException e) {
e.printStackTrace();
}
}
public EditText getTextIpScheda(){
return textIpScheda;
}
public void setTextIpScheda(EditText textIpScheda){
this.textIpScheda = textIpScheda;
}
public EditText getTextUdpPort() {
return textUdpPort;
}
public void setTextUdpPort(EditText textUdpPort) {
this.textUdpPort = textUdpPort;
}
Ici le code UdpClientServer:
public class UdpClientServer {
public static String sReceive;
private static DatagramSocket dSocket;
int receiveBufferSize = 1024;
int portUdp = 0;
final String PINGACMD = "AT*PINGA001";
InetAddress ipScheda;
byte[] receiveData = new byte[receiveBufferSize];
private MainActivity gui = null;
public UdpClientServer(MainActivity gui) throws SocketException, IOException {
this.gui = gui;
portUdp = Integer.parseInt(String.valueOf(gui.getTextUdpPort().getText()));
dSocket = new DatagramSocket(portUdp);
}
public void run(){
while (true) {
//svuotamento buffer
Arrays.fill(receiveData, (byte) 0);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
try {
dSocket.receive(receivePacket);
} catch (IOException e) {
e.printStackTrace();
}
ipScheda = receivePacket.getAddress();
int port = receivePacket.getPort();
gui.getTextUdpPort().setText("" + port);
gui.getTextIpScheda().setText(ipScheda.getHostAddress());
sReceive = new String(receivePacket.getData());
this.sendCommand(PINGACMD);
}
}
public void sendCommand(String outSentence){
byte[] sendData = outSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipScheda, portUdp);
try {
dSocket.send(sendPacket);
Thread.sleep(100);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
}
}
}
Et ici le logcat:
12-29 11:43:22.291 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ java.net.SocketException: socket failed: EACCES (Permission denied)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:623)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:93)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.net.DatagramSocket.createSocket(DatagramSocket.java:157)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.net.DatagramSocket.<init>(DatagramSocket.java:80)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at com.example.matteo.myfirstapp.UdpClientServer.<init>(UdpClientServer.java:32)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at com.example.matteo.myfirstapp.MainActivity.onCreate(MainActivity.java:24)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5933)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:144)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at libcore.io.Posix.socket(Native Method)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:608)
12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ ... 18 more
Dans mon AndroidManifest.xml juste ajouté de la chaîne
<uses-permission android:name="android.permission.INTERNET"/>
mais il ne fonctionne pas
Pouvez-vous m'aider?
Grâce
- Vous essayez de nous un numéro de port < 1024 et vous n'avez pas de racine autorisation.
- je suis en utilisant le numéro de port 5200
- Avez-vous d'autres applications qui s'exécutent sur le port 5200 ? Vous pouvez essayer quelques-uns plus de nombre aléatoire pour tester. Comme vous n'êtes pas en mesure de créer des sockets avec le port de votre choix. Essayez avec un autre port.
- Double Possible de message d'Erreur " java.net.Exception socketexception: socket a échoué: EACCES (Permission denied)'
Vous devez vous connecter pour publier un commentaire.
Essayez d'ajouter le suivant:
essayez d'ajouter de l'autorisation suivante :
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />