2015-11-12 77 views
0

我得到下面的異常安卓:socket失敗: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 .:然後你還有其他一些問題,除了缺少'INTERNET'權限。 – 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" /> 

您還需要Internet權限:

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

這是你的權限問題。 你錯過了Internet-permission

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

添加給你的代碼應該解決您的問題。

希望有幫助!

+0

如果我添加此聲明,該應用程序崩潰 –

相關問題