首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android发送广播报文EACCES失败

Android发送广播报文EACCES失败
EN

Stack Overflow用户
提问于 2014-07-25 18:34:32
回答 2查看 788关注 0票数 0

我想在Android中使用套接字。但是它失败了,因为我得到了一个EACCESS异常。我包含了100多个Android权限,只是为了确认一下,这不是权限问题。;)如果我接受这些权限,我也会被问到是否手动安装它...

2185-2199/com.myexample.wakeonlan W/System.err:原因: libcore.io.ErrnoException:绑定失败:事件(权限被拒绝)

2185-2199/com.myexample.wakeonlan W/System.err: at libcore.io.Posix.bind(本地方法)

2185-2199/com.myexample.wakeonlan w/system.err: at libcore.io.ForwardingOs.bind(ForwardingOs.java:39)

2185-2199/com.myexample.wakeonlan w/system.err: at libcore.io.IoBridge.bind(IoBridge.java:87)

我试着使用:

代码语言:javascript
复制
DatagramSocket socket = new DatagramSocket(1);
        try
        {
            InetSocketAddress address = new InetSocketAddress(
                    "255.255.255.255", 0);
            DatagramPacket datagram = new DatagramPacket(packetData,
                    packetLength, address);
            socket.setBroadcast(true);
            socket.send(datagram);
        }
        finally
        {
            if (socket != null)
            {
                socket.close();
            }
        }

错误:

代码语言:javascript
复制
07-25 10:07:32.462    2185-2185/com.myexample.wakeonlan D/gralloc_goldfish﹕ Emulator without GPU emulation detected.
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ java.net.BindException: bind failed: EACCES (Permission denied)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at libcore.io.IoBridge.bind(IoBridge.java:89)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:68)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at java.net.DatagramSocket.createSocket(DatagramSocket.java:133)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at java.net.DatagramSocket.<init>(DatagramSocket.java:78)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at com.myexample.wakeonlan.WakeOnLan.wake(WakeOnLan.java:137)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at com.myexample.wakeonlan.WakeOnLan.wake(WakeOnLan.java:23)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at com.myexample.wakeonlan.EntryActivity$MyAsyncTask.doInBackground(EntryActivity.java:57)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at com.myexample.wakeonlan.EntryActivity$MyAsyncTask.doInBackground(EntryActivity.java:41)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:264)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ Caused by: libcore.io.ErrnoException: bind failed: EACCES (Permission denied)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at libcore.io.Posix.bind(Native Method)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at libcore.io.ForwardingOs.bind(ForwardingOs.java:39)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ at libcore.io.IoBridge.bind(IoBridge.java:87)
07-25 10:07:42.622    2185-2199/com.myexample.wakeonlan W/System.err﹕ ... 14 more

相关代码:

代码语言:javascript
复制
 private class MyAsyncTask extends AsyncTask<String, Void, String> {

        String msg = "";
        @Override
        protected String doInBackground(String... params) {
            String adr = "";
            if(params.length > 0)
                adr = params[0];
            else
            {
                msg = "No Input for Mac Address";
                return msg;
            }

            try {
                com.example.ethernet.wakeonlan.WakeOnLan.wake(adr);

                msg = "ok" + adr;

            } catch (Exception e) {
                msg = "not ok" + adr;
                e.printStackTrace();
            }

            return "Executed";
        }

        @Override
        protected void onPostExecute(String result) {
            TextView txt = (TextView) findViewById(R.id.textView);
            txt.setText(msg);
        }

        @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
    }

按钮点击:

代码语言:javascript
复制
public void sendWakeOnLan(View v)
    {
        String adr = "a valid mac address";
        new MyAsyncTask().execute(adr);
    }
EN

回答 2

Stack Overflow用户

发布于 2015-07-11 23:18:55

我不能添加评论,因为声誉我认为更好的ip地址255.255.255.255为子网广播地址例如:192.168.1.255 ...取决于你的网络地址。并将您的端口固定为比1024更大的值

票数 0
EN

Stack Overflow用户

发布于 2020-04-27 02:30:56

在我的例子中,这个问题是因为我试图绑定一个DatagramSocket,而这个must必须已经被我设备上的另一个程序使用了。我改变了端口,它起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24953739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档