2015-11-12 2 views
0

я получаю следующее исключениеAndroid: сокет не удалось: EACCES (Отказано в)

I/System.out: java.net.SocketException: socket failed: EACCES (Permission denied) 

У меня есть замкнутая сеть без доступа в Интернет, только маршрутизатор, устройство Android и малина пи.

Мои AndroidManifest:

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk android:minSdkVersion="16" /> 

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


<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

У меня есть только один вид деятельности MainActivity:

public class MainActivity extends Activity { 

private static final int PORT= 8888; 
private static final int TIMEOUT_MS = 500; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    final TextView tView; 
    Button buttonRed, buttonGreen, buttonBlue, buttonWhite; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tView = (TextView) findViewById(R.id.showroom_welcome); 

    buttonRed = (Button) findViewById(R.id.buttonred); 
    buttonRed.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      /*send message xyz*/ 
      try { 
       String message = "\"xyz\""; 
       DatagramSocket socket = new DatagramSocket(PORT); 
       socket.setBroadcast(true); 
       socket.setSoTimeout(TIMEOUT_MS); 
       DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), getBroadcastAddress(), PORT); //InetAddress.getByName("192.168.100.255"), PORT); 
       socket.send(packet); 
      }catch(UnsupportedEncodingException uee){ 
       tView.setText(uee.getMessage()); 
       System.out.println(uee.getMessage()); 

      }catch (SocketException se){ 
       tView.setText(se.getMessage()); 
       System.out.println(se+"\n"); 

      }catch (IOException ioe){ 
       tView.setText(ioe.getMessage()); 
       System.out.println(ioe + "\n"); 
      } 
     } 
    }); 
} 

Это UDP-клиент, который посылает только xyz до raspi. У вас есть идея, в чем проблема?

ответ

0

Добавить INTERNET разрешения:

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

Я попробовал это уже раньше, когда я его добавлю, приложение аварийно завершает работу. –

+0

@JuliaM .: Тогда у вас есть еще одна проблема, кроме того, что отсутствует разрешение «ИНТЕРНЕТ». – CommonsWare

0

Вы только настройку разрешения для государства вашей сети. Вам нужно только состояние, если вам нужна информация, в которой вы находитесь, или если вы хотите программно изменить сеть.

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

неправильно изменить его:

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

Кроме того, необходимо в Интернете Разрешение:

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

Это проблема с разрешениями. Ваш отсутствует Internet-permission:

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

Добавление этого в ваш код должен решить вашу проблему.

Надеюсь, что это поможет!

+0

, если я добавлю это утверждение, приложение выйдет из строя –

Смежные вопросы