2014-12-29 13 views
13

Cześć, dostaję aplikację na Androida, ale po jej uruchomieniu pojawia się błąd w mojej konsoli. Używam gniazda Datagram do utworzenia połączenia i używam 2 klas: MainActivity (jest to główna aktywność aplikacji) i UdpClientServer do utworzenia połączenia.Android java.net.SocketException: gniazdo nie powiodło się: EACCES (odmowa uprawnień)

Tutaj główną działalność Kod:

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; 
} 

Tutaj UdpClientServer Kod:

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 { 
    } 
} 

}

I tu 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 

W moim AndroidManifest.xm l właśnie dodany ciąg

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

ale to nie działa

Czy możesz mi pomóc? Dzięki

+0

starasz się nas numer portu <1024 i nie masz uprawnień administratora . – EJP

+0

Używam portu numer 5200 – xXJohnRamboXx

+0

Czy masz jakieś inne aplikacje, które działają na porcie 5200? Możesz wypróbować większą liczbę losową do przetestowania. Ponieważ nie jesteś w stanie stworzyć gniazda z żądanym portem. Spróbuj z innym portem. –

Odpowiedz

20

spróbuj dodać następujące:

<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" /> 
+0

działa dobrze dzięki! –

2

spróbuj dodać następujące uprawnienia:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Powiązane problemy